去书城买来,饱读之后置于书架之上,扮作有学问之人:) 本想买英文影印版,未能寻到,就买本中文的凑合着看,
看完之后发现有几处明显的翻译错误(好在有英文CHM作为对照).技术类书籍一直都是读的英文CHM或PDF,这一本是例外.
chapter 1
1.当应用程序向内核请求调用一个系统调用时,我们说内核正在代其执行,如果进一步解释,在这种情况下,应用程序被称为通过系统调用在内核空间运行;而内核则被称为运行在进程上下文中.
2. 硬件与内核的交互:当硬件设备想和系统进行交互时,它首先要向CPU发送一个异步的中断信号,然后由CPU去打断内核当前正在执行的工作,中断通常对应着 一个中断号,内核通过这个中断号来查找对应的中断处理程序,并调用这个找到的中断处理程序来处理中断.为了保证同步,内核可以停用中断,也就是忽略某个中 断,既可以停止所有的中断处理程序,也可以有选择性地停止某些中断处理程序。许多操作系统的中断处理程序都不在进程上下文中,而是在一个单独的与所有的进 程都无关的中断上下文中执行,这样做是为了保证中断处理程序在第一时间响应和处理中断信号,并快速退出.
3.任一时刻,CPU的活动范围为以下三者之一:
4.单内核与多内核:操作系统的内核设计分为两大阵营:单内核和微内核(以及在科研中的外内核)
大部分的UNIX和Linux是单内核系统.Linux同时也吸收了微内核的优点:内核模块化设计,抢占式内核,支持内核线程,以及动态内核模块加载和卸载.
5.Linux内核并不区分进程和线程,对于内核来说,只有进程,而且所有的进程都一样,只不过是有的进程共享一些资源而已.
6.Linux内核的版本号:x.y.z
chapter 2
7.内核源码文件结构:
8.内核中的内核空间都不分页,所以,如果内核空间使用了一个字节的内存,那么实际的可用的物理内存就少了一个字节。
9.在内核中没有内存保护机制.
10. 不要轻易在内核中使用浮点数.在用户空间进行浮点数操作时,内核会完成从整数操作到浮点数操作的模式转换,在执行浮点数操作时到底会做些什么,因体系结构 的不同,内核的选择也会不同,但是内核通常捕获陷阱并做相应的处理.和用户空间进程不同,内核并不能完美支持浮点操作,因为它本身不能陷入.在内核使用浮 点数时,除了要人工保存和恢复浮点计数器,还有其它的一些琐碎的事情要做.所以:不要在内核中使用浮点数.
11.内核开发中,不能使用内核源代码之外的其它的外部库文件.
12.内核中没有printf函数,但是有printk函数可以用于打印调试信息.
13. 内核的栈空间很小:内核栈的准确大小随体系结构而变.在X86系统中,栈的大小可以在编译时配置,可以是4KB,也可以是8KB.从历史上说,内核栈的大 小是两页,这也就意味着,在32位系统上内核栈是8K,在64位系统上,内核栈是16K,这是固定不变的,每个处理器都有自己的栈.
14.硬件中断是异步到来的,由CPU发送给内核,完全不顾及内核当前的操作.
15.Linux内核中常用的用于解决并发产生的竞争的办法是:自旋锁和信号量.
chapter 3
15.进程:就是包含各种资源的处于执行期的程序.
16.线程:进程中的活动对象.每个线程都有一个独立的程序计数器,进程栈和一组进程寄存器.
17.内核调度的是线程而不是进程.
18.Linux中,进程与线程并不特别进行区分,对于内核而言,线程只不过是一种特殊的进程而已.
19.进程的5种状态:
20.UNIX创建进程的方式: