Linux内核设计与实现 读书笔记
扫描二维码
随时随地手机看文章
第二章 Linux内核
1 内核开发特点
1)内核编译时不能访问C库;
2)浮点数很难使用;
3)内核只有一个定长堆栈;
4)注意同步和并发。
第三章 进程管理
1current宏:查找当前运行进程的进程描述符。
2 进程状态(5种)
TASK_RUNNING :1)正在运行;2)在运行队列中等待执行。
TASK_INTERRUPTIBLE:进程正在睡眠,可以被信号唤醒。
TASK_UNINTERRUPTIBLE:进程正在睡眠,不会收到信号被唤醒。
TASK_ZOMBIE:僵死态,进程已经结束,父进程未使用wait4()。
TASK_STOPPED
3 进程上下文
进程进入内核空间时,current宏依然有效,内核“代表进程执行”。
4 进程创建
1)fork():拷贝当前进程创建一个子进程。
2)exec():读取可执行文件并载入地址空间开始运行。
3)写时拷贝(copy-on-wrtie):推迟数据拷贝,在需要写入数据时,数据才会被复制。
4)vfork():不拷贝父进程的页表项,子进程作为父进程的一个线程在它的地址空间运行,父进程被阻塞直至子进程退出,子进程不能向地址块空间写入数据。
5 线程
Linux把所有的线程都当作进程来实现。
6 内核线程:独立运行在内核中的标准进程。内核线程没有独立的地址空间,只能在内核空间中运行,创建内核线程用kernel_thread()。
7 进程终结
1)释放资源;
2)进入TASK_ZOMBIE;
3)等待wait4()。