操作系统:设计与实现 读笔(1)

第一章,引言,草草略过,大致了解了,概要如下:

对操作系统有两种观点:资源管理器观点和扩展的计算机观点。从资源管理器观点看,操作系统的任务是高效地管理整个系统的各个部分;从扩展的计算机观点看,其任务是为用户提供一台比物理计算机更易于使用的虚拟计算机。
操作系统的历史很长,从早期的代替操作员手工操作的系统,到现在的多道程序系统。
任何操作系统的核心都是一套系统调用,系统调用界定了操作系统能完成的功能。对于MINIX,其系统调用分为六大类,第一类与进程创建和终止有关。第二类处理信号。第三类针对文件读写。第四类进行目录管理。第五类对信息进行保护。第六类用于时间管理。
操作系统有若干种构造模型,常见的有整体式模型,层次式模型,虚拟机模型和客户-服务器模型。

第二章,介绍进程相关的内容,明天继续看关于MINIX如何具体实现进程,进程间通信(IPC问题),以及进程调度。

小结如下:

为了屏蔽中断的影响,操作系统提供了一个由并发运行的顺序进程所构成的概念模型。进程之间可以使用进程间通信原语来相互通信,比如信号量、管程、消息等。使用这些原语是为了保证任一时刻不会同时有两个进程进入临界区。进程的状态可以是运行、就绪、或阻塞,且当它或另一个进程执行一条进程间通信原语时可能引起状态的改变。
进程间通信原语可用来解决诸如生产者-消费者、哲学家用餐、读者-写者以及理发师睡觉等问题。但即使使用了这些原语,也必须注意避免错误和死锁。目前已经有许多种调度算法,包括时间片轮转、优先级调度、多级队列以及策略驱动的调度等。
MINIX支持进程概念,并提供了用于进程间通信的消息。消息是不加以缓冲的,所以一条SEND操作只有在接收者正在等待它时才成功。同样地,一条RECEIVE操作只有在消息已经可用时才成功。这两种操作的调用进程在操作不成功时都将阻塞。
当中断发生时,核心的最底层将构造一条消息,并将消息发送到与中断设备相关的系统任务。例如,当磁盘任务读写一块数据时,它先向硬盘控制器发出一条命令,然后调用receive并阻塞。当数据准备好之后硬盘控制器将发出一条中断。低层软件随后构造一条发给硬盘任务的消息并将其标志为就绪。当硬盘任务被再次调度运行时,它将获取该消息并进行处理。中断处理例程当然也可以直接进行一些操作,例如时钟中断处理程序更新时间。
中断可能引发任务切换。当一个进程被中断时,该进程的进程表项中将建立一个堆栈,再次启动该进程所需的全部信息都放在这个新堆栈上。通过以下操作可以再次启动任何一个进程:将栈指针指向其进程表项,然后执行一个指令序列来恢复CPU寄存器值,最后以一条iretd指令结束。调度程序决定堆栈指向哪个进程表项。
核心本身在运行时也可能发生中断。CPU检测到中断后将使用核心栈,而不是进程表中的堆栈。这样便允许中断嵌套。当后来的中断服务例程结束后,在它之前执行的中断服务例程就可以运行直到结束。在所有中断都被处理之后则可以重启动一个进程。
MINIX调度算法使用三个优先级队列。优先级最高的是系统任务;下一个是文件系统、内存管理器及其他服务器进程;最低的是用户进程。用户进程每次运行一小段时间,这样便达到时间片轮转的调度效果。但其他进程则一直运行直到阻塞或被剥夺为止。

时间: 2024-10-22 01:07:57

操作系统:设计与实现 读笔(1)的相关文章

Python核心编程读笔 13:执行环境

第14章  执行环境 一.可调用对象 二.代码对象 三.可执行的对象声明和内建函数 四.执行其他程序 1 执行其他python程序 2 执行其他非python程序 五.受限执行 六.结束执行 七.各种操作系统接口

Linux程序设计 读笔1

第一章 入门 Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件 /bin 二进制文件目录,存放启动系统时用到的标准程序 /usr/bin 用户二进制文件目录,存放用户使用的标准程序 /usr/local/bin 本地二进制文件目录,存放软件安装的程序 /sbin和/usr/sbin root用户使用,存放系统管理程序 /opt 存放可选的操作系统组件和第三方应用程序 第一个Linux程序:Hello World程序 hello.c #include<stdio.h> #incl

操作系统设计与实现 读笔(2)

当开始阅读第二章后半部分关于MINIX的源码分析,如头文件的继承关系,C语言的使用技巧,#define #undef #endif ,很多汇编代码,kernel文件夹下的mpx386.s,start.c,main,c文件,以及后面关于中断处理,等等内容,实在难以在前后产生系统的,完整的联系与思路,难以继续推进. 遂,开始第3章. 注意点:认真读示例部分给出的伪代码,尽量理解原理,关于MINIX的具体实践,显然需要更深入的硬件理解能力,以及阅读工程性代码的能力,需要单独花时间,分模块地思考,仅仅根

操作系统设计与实现 读笔(3)

第三章:I/O. 软件必须处理的问题:I/O硬件,I/O设备和I/O控制器的关系. I/O软件的四个层次:中断例程,设备驱动程序,设备无关I/O软件,以及在用户空间运行的I/O库和假脱机(?). 死锁概念:发生在一组进程都拥有对某些资源的互斥存取权,并且每个进程还要求仍属于该组中另一个进程的资源时. MINIX中的设备驱动程序是作为嵌入在内核中的进程来实现的. 同步闹钟任务与任务系统不是设备驱动程序但在结构上非常相似.都有一个主循环取出请求并进行处理,逐渐送回回答消息报告发生的事件.所有的任务都

操作系统设计与实现 读笔(5)

第五章,文件系统: 从外部来看,文件系统是一组文件和目录. 在内部看,文件系统却迥然不同.文件系统的设计者必须考虑到存储区如何分配以及系统如何记录文件使用了哪些块.不同的文件系统具有不同的目录结构.文件系统的可靠性和性能也是一个重要问题. 文件系统的安全和保护对用户和设计者都至关重要.我们讨论了早期系统中的一些安全缺陷以及大多数系统的共同问题.还讨论了身份确认.存取控制表.权限以及矩阵模型等. 详细研究了MINIX文件系统.MINIX文件系统很大,但并不复杂.它从用户进程接收任务请求,索引过程指

我设计的ASP.NET笔试题,你会多少呢

本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态?如何实现? 第4题:什么是泛型约束? 第5题:Func<T>和Action<T>这2个类有何区别? 第6题:假设有实体类Product,下有bool IsDeleted属性,请用代码写出IQueryable<Product>的扩展方法WhereDeleted,从而过滤得到已

Python核心编程读笔 11:模块

第12章 模块 1.基本概念 2.命名空间 3.导入模块 4.模块内建函数包 5.模块的其他特性

Python核心编程读笔 12:OOP

第12章 面向对象编程 一.基本概念 二.类 1 类 2 实例 3 绑定与方法调用 三.继承.子类和派生 1 子类和派生 2 继承 四.类.实例和其他对象的内建函数 五.定制类 六.私有化 七.授权与包装 八.新式类的高级特性

Python核心编程读笔 6: 条件和循环

第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < y else y 二.while 三.for 1 通过序列项迭代: for eachName in nameList:2 通过索引迭代: >>>for nameIndex in range(len(nameList)): ... print "Liu,", nameLi