2.18
休眠通过等待队列进行处理。等待队列是由等待某些时间发生的进程组成的简单链表。
内核用wake_queue_heat_t来代表等待队列。
2.17
如果一个进程的大部分时间都在休眠,那么它就是I/O消耗型的。
如果一个进程执行的时间比休眠的时间长,那么它就是处理器消耗型的。
选定下一个进程并切换到它去执行是通过schedule()函数实现的;
自旋锁用于防止多个任务同时对可执行队列进行操作;
调度程序中最基本的数据结构是运行队列(runqueue);
可执行队列是给定处理器上的可执行进程的链表,每个处理器一个;
LInux的调度程序定义于kernel/sched.c中;
时间片是一个数值,它表明进程在被抢占前所能持续运行的时间;
进程并不是一定非要一次就用完它所有的时间片;
调度程序总是选择时间片未用尽,并且优先级最高的进程运行;
2.16
所有的进程都是PID为1的init进程的后代。内核在系统启动的最后的阶段启动init进程。该进程读取系统的初始化脚本(initscript)并执行其他的相关程序,最终完成系统启动的整个过程;
进程的另一个名字是任务(task)。Linux内核通常把进程也叫做任务。
内核调度的对象是线程,而不是进程;
存放全局变量的数据段;
一段可执行程序代码,代码段(text section);
2.15
认真阅读源码非常必要,Linux系统代码的开放性其实是弥足珍贵的,不要无动于衷地将它搁置一边,从而浪费了打好资源。
只有动手写代码才能真正融会贯通。
Linux克隆了Unix,但Linux不是Unix。
尽管Linux借鉴了Unix的许多设计并且实现了Unix的API,但Linux没有像其他Unix变种那样直接使用Unix的源代码;
通常,一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成;
内核开发者通常把那些对时间要求比较高,而本身长度又比较短的函数定义成内联函数;
2.13
driver routines registered with VFS through the file_operations structures;
2.2
distinguish pages(groups of data) from page frames(physical address in main memory).
This allows the same page to be stored in a page frame, then saved to disk and later
reloaded in a different page frame.This is the basic ingredient of the virtual memory mechanism.
术语“页”既指一组线性地址(即虚拟地址),又指包含在这组地址中的数据;
把线性地址(虚拟地址)映射到物理地址的数据结构称为页表(page table);
2.1
80*86微处理器怎样进行芯片级寻址,linux又是如何利用寻址硬件的;
2万+

被折叠的 条评论
为什么被折叠?



