和Steve之间的通信--RE: 关于《UNIX技术内幕》的勘误及遇到的问题_13

简介: Steve,请参见答复。From: quntmec@hotmail.comTo: qf.hao@hotmail.comSubject: 关于《UNIX技术内幕》的勘误及遇到的问题_13Date: Thu, 3 Nov 2011 15:10:59 +0800 郝先生,目前碰到的疑问如下:1、第169页,第2行下面的表格,对于“shell进程”记录的“p_pri”项,为何为0?我重现再看99~100页的有关 newproc()的代码,也没有发现该项的赋值。
Steve,
请参见答复。
From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: 关于《UNIX技术内幕》的勘误及遇到的问题_13
Date: Thu, 3 Nov 2011 15:10:59 +0800

郝先生,

目前碰到的疑问如下:

1、第169页,第2行下面的表格,对于“shell进程”记录的“p_pri”项,为何为0?我重现再看99~100页的有关 newproc()的代码,也没有发现该项的赋值。
[郝]:就本例而言,shell是系统第一次创建的,那么它确实为0,因为它在系统初始化时被清除为0,具体参见第61页start函数的31~35行,bss段是所有未初始化的全局变量段,
当然也包括proc数组。不过这里确实需要加以说明更好。当然对以后新进程的创建,就不一定为0了。

2、第169页,第7段,第一行:“新优先级=PUSER+p_nice+p_cpu/16=100+0+28/16=101”。其中,p_nice为0,这个不太明白?或者说,p_nice是在哪里被赋值为0的?
[郝]:同上。

3、第170页,第5段,第一行:“....shell进程挂起(挂起优先级=10)....”。我查阅了一下第117页里有关挂起优先级的定义值(第12段下面的6个#define语句),但并未查到有优先级为10的挂起操作.....
[郝]:好发现! 它事实上指TTIPRI,在 第九章 351页下方定义,因为shell是和用户交互的,所以通常情况下它会挂起在字符终端上。下版会加说明。
4、第174页,第2段,第3行:“由于调度进程优先级高于当前运行的shell进程,runrun标记被设...”。这句不太理解?我查了一下相关的代码,但都没有发现这里提到的有关优先级的比较和runrun被设的代码。请问这些代码出现在哪个函数里?
[郝]:clock函数(第153页)。

5、第176页,第2段下面的表格(即本页第3个表格)处,为何进程B的优先级没有被调整?参看第156页,代码60~61,进程B的p_pri应该被调整为100。
[郝]:对,谢谢。
6、第177页,第2段,第一行:“进程B的优先级被调低,这样runrun标志被设.....”。这里是否应该这样理解:

1)第176页,第3段,在进程A的优先级被调低后,call函数调用swtch重新分配CPU。在第104页的swtch函数里的第45行,curpri会被设置成“下一个将要被调度的进程的优先级(即进程B的优先级)”,大小为100.

2)当第60个时钟滴答过后,在clock()函数的第60~61行处会跳转至setpri()函数处,并在这里将进程B的优先级调整为103(即p为103)。则在该函数的第9、10行里设置了runrun。

是这样理解吗?
[郝]:是。
7、第177页,第4段,第一行:“最后swtch函数执行 rts pc 返回时....”,我的问题如下:

1)swtch函数里似乎没有 rts pc 这样的语句,只有 return(1).....
[郝]:就是return,说的是它的汇编码。
2)cret函数是作什么用的?
[郝]:恢复寄存器值,在第2章有说明。
3)r2~r5是如何保存到栈里面的?具体代码出处在哪里?
[郝]:csav,编译器生成代码调的。

此外,勘误如下:
174 2   2段下面的表格(即本页的第2个表格),在“shell进程记录处,p_cpu的值是50(应为80),p_time110(应为80)。同理,第3个表格的“shell进程”记录处,p_cpu的值应改为70p_time81p_pri104;第4个表格的“shell进程”记录处,p_cpu的值应改为70p_time81p_pri104
177 3 3 否则,如果建立此映射(应改为如果“并未”建立此映射)…..
177 4 1 5-12,这个标识应该有问题,但我也不太清楚你要表述的是哪个图(是图6-22吗?)
178 2 1 5-12,问题同上

[郝]:检查中。

Steve
目录
相关文章
|
11月前
|
网络协议 Unix Go
Go unix domain socket通信
Go unix domain socket通信
|
Unix
《返璞归真--UNIX技术内幕》--第14章 多线程的实现
14.1  概述 现代操作系统引入了线程的概念。线程是CPU执行的最小单元,相对于进程而言,它具有轻捷、高效、开销小等优点。 14.2  线程和经典进程的比较 线程和经典进程的主要区别如下。
873 0
|
Unix
《返璞归真--UNIX技术内幕》-- 第11章 UNIX可执行文件
11.1  .out文件 本版UNIX的可执行文件是.out格式,如果你在UNIX下用gcc编译程序,它默认会生成一个名为“a.out”的可执行文件。
889 0
|
Unix
《UNIX技术内幕》--第3章 虚拟内存
Normal 0 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.
613 0
|
Unix C语言
《返璞归真--UNIX技术内幕》--第6章 中断处理过程
6.4  PDP 11/40的中断类型 系统中的中断主要有下面几种。 6.4.1  电传终端接口输入中断 电传终端接口用于链接PDP 11/40的总线和主要的输入、输出终端,当时该终端是电传打字机,这也是UNIX中用tty(teletypewriter)表示进程所使用的终端类型的原因,事实上电传接口还可以连接彩色显示器(CRT)等。
910 0
|
存储 缓存 Unix
《返璞归真--UNIX技术内幕》--第9章 字符设备驱动
本系统中的输入输出设备都是字符设备,它们包括:KL-11/DL-11A——电传串行接口、PC-11——纸带打孔机和LP-11——行打印机。其中KL-11用于连接终端(terminal),作为用户键盘输入和显示输出的交互接口。
952 0
|
Unix
《返璞归真--UNIX技术内幕》--源代码
本源代码经宁希波帮助整理,去除了''和'&'符号,在此表示诚挚的谢意!源码中除/usr/personal目录外,均由Bell Labs(贝尔实验室)开发。
693 0
|
Unix Linux 调度
《UNIX技术内幕》勘误及问题解答_26
From: quntmec@hotmail.com To: qf.hao@hotmail.com Subject: 关于《UNIX技术内幕》的勘误及遇到的问题_26 Date: Sun, 26 Feb 2012 16:34:18 +0800 郝先生, 线程方面碰到的问题如下: 1、689页,倒数第2、3行,里面提到第14章所实现的线程在退出时只会将线程栈释放、而不会释放该线程所分配的堆空间,这是否会造成内存泄漏?[郝]:如果用户线程在每次调用malloc后,都会调用free来释放它,那么就不会有内存泄漏。
937 0
|
Unix
《UNIX技术内幕》勘误及问题解答_25
From: quntmec@hotmail.com To: qf.hao@hotmail.com Subject: RE: 关于《UNIX技术内幕》的勘误及遇到的问题_25 Date: Fri, 17 Feb 2012 11:08:10 +0800 郝先生, 对...
803 0
|
6月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
68 2