操作系统的核心——内核
管理和分配计算机资源的核心层软件,其职责如下:
1. 进程调度
2. 内存管理
3. 提供文件系统
4. 创建和终止进程
5. 对设备的访问(驱动)
6. 联网
7. 提供系统调用应用编程接口api
现代CPU至少可以在两种不同状态下运行:用户态(Ring 3)和内核态(Ring 0),虚拟内存空间也被划分为用户空间部分和内核空间部分。在用户态运行时,不可以访问内核空间部分的内存;在内核态时,两部分内存均可访问
shell
主要用于读取用户输入的命令,并执行相应的程序,比较流行的有Bourne shell(shell)、C shell(csh)、Korn shell(ksh)、Bourne again shell(bash)
用户和组
系统会对每个用户的身份做唯一标识,用户可以隶属于多个组,相关的文件有/etc/passwd, /etc/shadow等,root的uid为0
单根目录层级、目录、链接以及文件
文件类型:普通文件、设备、管道、套接字、目录以及符号链接
软链接和硬链接:硬链接所指的inode都一致,软链接的inode指向单独文件,其存储内容为执行的实际文件。
文件权限
文件I/O模型
Linux系统I/O模型最为显著的特征之一是其I/O通用性概念。也就是说,同一套系统调用所执行的I/O操作,可以施加在所有文件类型上,也就是“一切皆文件”
进程
进程的内存布局:
1. 文本段
2. 数据段
3. 堆
4. 栈
_exit()函数退出进程
用户相关id:
1. 真实用户id和组id:标识进程所属的用户和组(谁启动的这个东西)。新进程会从其父进程处继承
2. 有效用户id和组id:进程在访问受保护资源时,会使用这两个id来确定访问权限
3. 补充组id:用来标识进程所属的额外组
capabilities:始于内核2.2, linux把传统上赋予超级用户的权限划分为一组相互独立的单元(也就是“能力”)。每次特权操作都与特定的能力有关,仅当进程具有特定能力时,才能执行相应的操作。可以赋予某个进程部分能力,使得其能够执行某些特权操作,又能防止其执行其他特权操作
软资源限制:进程可以消耗某类资源的总量
硬资源限制:软限制调整的上限,只能调低,不能调高
内存映射
由某一进程所映射的内存可以与其他进程的映射共享。具体可以通过属性参数传递控制。
mmap()会在调用进程的虚拟地址空间中创建一个新的内存映射,有文件和匿名两种方式
静态库和共享库
动态链接器:GOT, PLT
进程间通信以及同步
信号(软中断),管道,套接字,文件锁,消息队列,信号量,共享内存
线程
共享同一数据区域和堆,每个线程都有自己的栈,用来装载本地变量和函数调用链接信息
进程组和shell任务控制
进程组id = 组长进程id
会话、控制终端和控制进程
会话指的是一组进程组,会话中所有进程都具有相同的会话标识符。通常,会话都会与某个控制终端相关,控制终端建立与会话首个进程初次打开终端设备之时。一个终端最多只能称为一个会话的控制终端
打开控制终端会致使会话首进程称为终端的控制进程。一旦断开了与终端的链接,控制进程将会收到SIGHUP信号
在任意时刻,会话中总有一个前台进程组,可以从终端中读取输入,向终端发送输出。一个会话可以拥有任意数量的后台进程组,有以“&”字符结尾的命令来创建
伪终端
伪终端是一对相互连接的虚拟设备,也称为主从设备,在这对设备之间,设有一条IPC通道,可供数据进行双向传递
日期和时间
真实时间:UTC 1970年1月1日凌晨其实
进程时间:系统CPU时间和用户CPU时间
/proc文件系统
是一种虚拟文件系统,以文件系统目录和文件形式,提供一个指向内核数据结构的接口。一般只有特权级进程才能修改/proc目录下的文件内容
阅读(6098) | 评论(0) | 转发(0) |