《深入理解Linux内核》 读书笔记
其他
2019-09-13 12:02:32
阅读次数: 0
深入理解Linux内核 读书笔记
一、概论
操作系统基本概念
- 多用户系统
- 用户和组
- 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样。对应的是Linux的文件权限系统
- 进程
- 和程序的区别。几个进程能并发执行同一个程序,一个进程能顺序执行几个程序
- 程序更像是代码片段,进程是执行代码的容器
- linux是抢占式操作系统,也就是一个进程只能占用CPU一段时间。非抢占式系统中,进程如果不释放CPU,可以一直占用
- 内核体系结构
- Linux是单块内核,同时提供模块(module)功能
- 模块是指:例如一个程序,引用了一个系统模块,这个系统模块不会是这个进程单独拥有,当其他程序也需要这个模块时,内核会把这个模块链接到其他程序。这样可以节省内存,也就是这个模块只会在内存中存在一份。模块就是一组函数,或者一段代码。
文件系统
- 文件
- 文件是以字节序列组成的信息载体(container)
- 文件目录是树结构
- 每个进程都有一个工作目录,通过pwdx 进程ID 命令可以查看
- 硬链接和软连接
- 链接类似window的快捷方式,创建一个文件,指向另一个文件
- ln p1 p2 就是创建一个文件p2,指向p1
- 硬链接只能指向文件,不能指向目录,因为会导致循环指向
- 硬链接只能指向同一个文件系统的文件(文件系统是物理划分,例如不同硬盘)
- 软链接没有硬链接这些限制,创建方法是加-s参数
- 文件类型
- 普通文件
- 目录
- 符号链接
- 面向块的设备文件
- 面向字符的设备文件
- 管道和命名管道(pipe named pipe)
- 套接字(socket)
- 文件描述符与索引节点
- 每个文件都有一个索引节点(inode)的数据结构,用来存储文件的描述信息,和文件的内容是区分开的。
- inode有(通过ll命令看到的):
- 文件类型
- 硬链接个数
- 文件长度
- 文件拥有者的uid
- 用户组的id
- 修改时间等
- 访问权限
- 访问权限和文件模式
- 文件操作
Unix内核概述
- 进程/内核模式
- 进程有用户态和内核态
- 用户态不能访问内核的数据结构和内核程序
- 两种态会经常切换,例如在时刻A,进程在用户态,在时刻B,进程在内核态
- 从用户态切换到内核态的情况:
- 调用系统调用
- 执行进程的CPU发送异常
- 外围设备向CPU发出中断
- 内核线程被执行
- 进程
- 每个进程有一个进程ID,pid
- 内核切换执行的进程时,会保存旧进程的信息,包括:
- 程序计数器和栈指针寄存器
- 通用寄存器
- 浮点寄存器
- CPU状态
- 内存管理寄存器
- 可重入内核
- unix内核都是可重入的
- 可重入是指,可以被重复进入,也就是可以同时有多个进程处于内核态
- 进程地址空间
- 同步和临界区
- 类似锁
- linux是抢占式内核,所以需要同步
- 信号量
- 每个资源都有一个信号量,类似int类型,初始值是1
- 每个进程访问资源,调用down方法,信号量减1,如果减1后,信号量小于0,进程被加入到访问队列中。如果大于等于0,进程可以访问资源
- 每个进程访问完资源,调用up方法,信号量加1,如果信号量大于等于0,激活访问队列的第一个进程
- 进程锁,线程锁的机制,应该都是这样的
- 这里要保证down和up的操作都是原子性的,不能并发
- 要防止死锁
- 锁里面的区域就是临界区,也就是acquire和release之间的代码
- 信号和进程间通信
- 信号和信号量是不一样的
- linux有20多种不同的信号,例如kill -9 中的 9就是一种信号
- 进程收到信号后,可以
- 忽略
- 异步执行指定程序(新开一个线程?),这种需要事先定义信号处理函数。
- 内核收到信号后,可以
- 终止进程(例如kill - 9)
- 忽略信号
- 挂起进程
- 恢复进程
- 进程间通信(IPC)
- 信号
- 消息(msgget(),msgsnd())两个系统调用,发信息和收信息,Python里面的进程间Queue应该就是用这个实现的
- 共享内存(shmget shmdt)两个系统调用
- 进程管理
- fork来启动一个子进程,一般在启动的时候复制父进程的数据和代码,但是这样效率较低,所以会使用写时复制,也就是一开始父子进程共享内存,当其中一个进程需要修改数据时,才执行复制操作
- exec用于启动子进程
- exit用于结束子进程
- wait4用于父进程等待子进程结束
- 内存管理
- 虚拟内存,在物理内存(MMU)和程序之间的抽象,相当于访问内存的代理。
- 内核内存分配器,KMA,用于管理内存
- 高速缓存 由于内存比硬盘快很多,所以从硬盘读取得数据会缓存在内存,使下次可以快速访问
转载自www.cnblogs.com/Xjng/p/11516471.html