和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  线程和经典进程的比较 线程和经典进程的主要区别如下。
874 0
|
Unix
《返璞归真--UNIX技术内幕》-- 第11章 UNIX可执行文件
11.1  .out文件 本版UNIX的可执行文件是.out格式,如果你在UNIX下用gcc编译程序,它默认会生成一个名为“a.out”的可执行文件。
890 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
|
6月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
69 2
|
22天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
Unix Linux 程序员
Unix:Linux的“逗趣祖师爷”与它的不凡传承
在科技长河中,Unix犹如一颗恒星,既是历史见证者也是未来的启发者。1969年,因程序员肯·汤普森想在他的PDP-7上玩“Space Travel”游戏,意外创造了Unix,以简洁优雅的代码改变了操作系统的世界。进入90年代,林纳斯·托瓦兹受Unix启发,开发了开源免费的Linux,像是Unix调皮的孙子,不仅继承其精髓还增添了开放共享的精神。Unix与Linux之间的传承,就像是智者与追蝶孩童的故事,充满了岁月的智慧与新生的活力,提醒我们科技传奇往往源于不起眼的小事。下次使用Linux时,不妨会心一笑吧!
53 0