一、基本信息
条目 | 内容 |
---|---|
姓名 | 提斯雷尔 |
学号 | 9527 |
学院 | 丽春院 |
班级 | |
项目名 | JSON++,json 文件的解析器 |
项目地址 | https://github.com/hjiang/jsonxx |
条目 | 内容 |
---|---|
姓名 | 提斯雷尔 |
学号 | 9527 |
学院 | 丽春院 |
班级 | |
项目名 | JSON++,json 文件的解析器 |
项目地址 | https://github.com/hjiang/jsonxx |
The political system of Britain is constitutional monarchy, which has two main characteristics, namely “parliamentary sovereignty” and “separation of powers”.
“Parlimentary sovereignty” means that parliamentary has absolute and ultimate power within the British system. Parliament can pass, repal and alter any of Britain’s laws.
The principle of dividing the functions of government is known as “the separation of powers”. And the principle behind it is to ensure that there is no excessive use of abuse of power by any small group people.
体系结构包括指令集,存储组织,I/O,总线结构。写到这里的时候真的觉得一切都值了。
一开始的操作系统是批处理式的。批处理的意思就是把一堆任务集中到一起,然后一起处理,这样的好处是实现了初步的流水线化。但是计算机要读取任务,要通过磁带,而磁带上的内容,要通过读卡器读取卡片(可能就是一堆打着孔的硬纸板吧)写到磁盘上,如果读一个任务写一个磁带,然后读一个磁带,处理一个任务,这就太慢了。所以就考虑可以先用读卡器将一堆任务的卡片都一起读到磁带上,然后一起把这些磁带上的任务处理了。这就是所谓的批处理。那么这个时候,操作系统的主要作用就是自动地一个任务一个任务的完成。
之后就变成了多道程序设计。尽管我们把写磁带这个功能给分割开来,让计算机可以安心处理磁带上的任务,但是计算机依然是需要读取磁盘上的内容的,这段 I/O 所占的时间 CPU 是不会工作的。为了把这段时间利用起来,我们可以考虑在内存中存放多个任务,这样当有一个任务在进行 I/O 的时候,CPU 可以去运算其他任务,这就是“多道程序设计”。所谓的“多道”,就是说在内存中存在多个任务。可以看作是在内存空间上实现了并行。
这个 Makefile 要比之前的文件夹中的 Makefile 更加复杂,是因为之前的文件夹都是对操作系统特定部分的一个编译指导,所以基本上是实现的功能就是“对应的 C 文件和汇编文件编译成目标文件”这一个功能,最后合成一个整体。但是 user
的 Makefile 指导的是多个用户程序的编译,最后生成的是多个用户目标文件,同时还需要给每个用户文件装备上库目标文件。
首先先补充一下 makefile 的一些知识
自动化变量
$@
表示目标(target)文件,就是冒号前面的那个文件$^
表示所有的依赖文件,就是冒号后面的那一堆文件$<
表示第一个依赖文件,就是紧挨着冒号后面的一个文件$*
这个变量表示目标模式中 %
及其之前的部分。如果目标是 dir/a.foo.b
,并且目标的模式是 a.%.b
,那么,$*
的值就是 dir/a.foo
。这一章虽然名义上很简单,但是我个人觉得真的很难,其难度是要远超于 lab3 和 lab4 的。对于 lab3 和 lab4,其难度主要集中于复杂的函数调用关系上,如果理清了函数调用关系,会发现难度就很容易弄清了,而理清函数关系只要通过认认真真的看代码,整理就可以办到。而 lab5 的难度在于理解操作系统的设计,这种理解不是代码层次的“一个函数是调用了哪些函数,传了哪些参数?”这一类的问题,而是 MOS 是怎样设计的,为什么要这样设计的问题。这些问题在 lab4 中也出现了,比如异常处理的微内核设计。
这一章的微内核与 lab4 的异常处理的微内核是两个东西,这是最重要的一点。微内核设计都强调将原本属于操作系统的一部分功能分配出来(比如说异常处理,文件系统),分配给用户进程完成。在 lab4 中,微内核设计是把异常处理的功能分出来,让每个进程都具有异常处理的功能(以库函数的形式)。但是在 lab5 中,微内核设计确实将文件系统的实现分了出来,但是并不是配置到了每一个用户进程上,让每一个进程都有文件系统的能力,而是专门开设了一个用户进程专门提供文件系统的服务(这也是这个用户进程的大部分实现文件都被放置在了 fs
文件夹下,而不是 user
文件夹下的原因),而其他进程想要获得文件系统的服务,就要与这个特殊的用户进程进行通信,就好像之前与操作系统进行通信一样。