概括
学也学不好,记也记不住。只能靠做笔记这个样子喽。
操作系统的核心: 内核
- 1.指完整的软件包,包括管理计算机资源的核心层软件,以及附带的所有标准软件工具。诸如命令行解释器。图形用户界面。
- 2.狭义上指管理和分配计算机资源的核心层软件。
内核职能:
- 进程调度:通过CPU 执行程序指令。Linux 属于抢占式多任务操作系统。
- 多任务指多个进程同时驻留内存,且每个进程都能获得对CPU的使用权。
- 内存管理:如今计算机的内存容量客观,但软件的规模也保持了相应的增长故物理内存仍属于有限资源。
- Linux 采用虚拟内存管理机制
- 优势:进程与进程之间,进程与内核之间彼此隔离,因此一个进程无法读取或修改内核或其他进程的内容。
- 只需将进程的一部分保持在内存中,降低了每个进程对内存的需求量,同时在RAM 中同时加载更多进程。CPU的资源利用率更加充分。
- Linux 采用虚拟内存管理机制
- 提供文件系统: 内核在磁盘上提供有文件系统允许对文件执行创建、获取、更新、删除等操作。
- 创建/终止进程: 内核将新程序载入内存,为其提供运行所需的资源。 这样一个运行中的程序 我们成为进程。进程执行完后,内核要确保释放其占用的资源。
- 对设备的访问:计算机外接设备(鼠标等
内核态 用户态
- 将内存区域划分相应的空间,用户态访问用户空间,内核态全能访问。
进程
正在执行的程序实例,执行程序内核会将程序代码载入到虚拟内存,为程序变量分配空间。以记录与进程有关的各种信息(进程ID , 用户ID , 组ID
进程的内存布局
- 文本: 程序的指令
- 数据: 程序使用的额静态变量
- 堆 : 动态分配内存
- 栈 : 随函数调用 返回而 增减的一片内存区域。用与为局部变量和函数调用连接信息分配存储空间。
创建进程和执行程序
- 进程通过系统调用fork() 创建一个新进程,调用fork() 的进程被称为父进程,内核通过对父进程的复制来创建子进程。继承过来的副本不会影响父进程。
- 子进程通过execve() 去加载并执行一个全新的程序。execve() 会销毁现有的文本段、数据段、栈 堆 ,并根据新程序代码 创建来替换他们。
进程通信及同步
- Linux 系统上运行许多个进程,许多都是独立运行。然而,有些需要相互合作达成预期目 进程间通信(IPC 机制
- 信号: 用来表示事件的发生
- 管道: 进程间传递数据 shell( | FIFO
- 套接字: 一台/多台 联网主机所运行的进程之间传递数据
- 文件锁定: 防止其他进程读取或更新文件内容 允许某进程对文件的部分进程加以锁定。
- 消息队列:进程间交换信息(数据包
- 信号量 : 同步进程动作
- 共享内存: 允许两个以上进程共享一块内存。
init进程
- 系统引导时,内核会创建一个init 的特殊进程,所有进程之父 对应 /sbin/init 文件。即 系统所有进程不是由init 直接创建 就是间接创建的
- init 进程号总为1. (super man 也杀不死
守护进程
是具有特殊用途的进程
- 长生不老 死之前 一直活着(溜
- 守护进程在后台运行,无控制终端 供读取或写入数据。
资源限制
- 每个进程都会消耗诸如打开文件,内存以及CPU时间之类的资源,使用系统调用setrlimit(),可为消耗的各类资源设定一个上限。
- fork()创建的子进程 会从父进程继承资源限制
线程
- 每个进程可执行多个线程。
- 共享同一数据区和堆区 每个线程拥有自己的栈区(用来装载本地变量和函数调用链接信息。
- 可以通过共享全局变量通信。