操作系统原理——简单总结

1、下面是计算机主要部件的简化视图(如右图)

多数计算机有两种运行模式:内核态用户态

软件中最基础的部分是操作系统,它运行在内核态在这个模式,操作系统拥有对所有硬件的完全访问权,可以执行机器能够执行的任何指令

那些会影响机器的控制或可进行I/O(输入/输出)操作的指令,在用户态中的程序里是禁止的

2、Linux或Windows操作系统的源代码有五百万行数量级

3、操作系统:一种运行在内核态的软件

4、批处理系统:指加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地成批处理一个或多个用户的作业

5、多道程序设计:计算机内存中同时存放几道相互独立的程序,但它们在管理程序控制下,相互穿插运行

6、处理器:

(1)cpu是从内存中取出指令并执行。在每个cpu基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,接着执行之。然后取指、解码并执行下一条指令。按照这一方式,程序被执行完成

(2)由于用来访问内存以得到指令或数据的时间要比执行指令花费的时间长得多,故所有cpu内部都有用来保存关键变量和临时数据的寄存器

这样,通常在指令集中提供一些指令,用以将一个字从内存调入寄存器,以及将一个字从寄存器存入内存

寄存器:

通用寄存器:保存变量和临时结果

专门寄存器:包括程序计数器(保存将要取出下一条指令的内存地址)、堆栈指针(指向内存中当前栈的顶端)、程序状态字(包含了条件码位(由比较指令设置)、cpu优先级、模式(内核或用户态)以及各种其他控制位)

(3)操作系统必须知晓所有的寄存器,每次停止一个运行着的程序时,OS必须保存所有的寄存器,这样稍后该程序被再次运行时,可以把这些寄存器重新载入

(4)现代CPU具有同时取出多条指令的机制(如下图)


(5)在用户态,为从操作系统中欧冠获得服务,用户程序必须使用系统调用,系统调用陷入内核并调用操作系统。TRAP指令把用户态切换成内核态,并启用操作系统(计算机使用陷阱而不是一条指令来执行系统调用)

7、存储器


寄存器和cpu相同材料制成,故和cpu一样快,访问它们没有时延

高速缓存:多数由硬件控制。最常用的高速缓存行放置在cpu内部或非常接近cpu的高速缓存中,高速缓存价格昂贵,有些机器有两级或三级高速缓存,每一级比前面的慢且容量大

缓存的作用:多数OS在内存中保留频繁使用的文件(的一部分),以避免从磁盘中重复地调取这些文件

现代cpu中设计了两个缓存,第一级或称为L1缓存总是在cpu中,通常用将已解码的指令调入cpu的执行引擎。对于那些频繁使用的数据字,多数芯片安排有第二个缓存,典型的L1缓存大小为16KB,往往还设计有二级缓存,称为L2缓存,用来存放近来所使用过的若干兆字节的内存字。L1和L2缓存之间的差别在于时序。对L1缓存的访问,不存在任何延时,而对L2缓存的访问,则会延时1或2个时钟周期


8、Intel多核芯片和AMD多核芯片采用的L2缓存的方式是不一样的,如下图


内存:主存RAM(随机访问存储器)、ROM(只读存储器):用于启动计算机的引导加载模块

同样非易失性的,但可擦除重复的

闪存:数码相机的胶卷、便携式音乐播放器的磁盘

磁盘:比较慢,其随机访问慢是由于磁盘是一种机械装置

许多计算机支持一种虚拟内存机制,这种机制使得期望运行大于物理内存的程序成为可能,其方法是将程序放在磁盘上,而将主存(RAM)作为一种缓存,用来保存最频繁使用的部分程序。这种机制需要快速地映像内存地址,以便把程序生成的地址转换为有关字节在RAM中的物理地址。这种映像由cpu中的一个部件,称存储器管理单元(MMU)来完成

9、I/O设备

I/O设备一般包括两个部分:设备控制器和设备本身。控制器是插在电路板上的一块芯片或一组芯片,这块电路板物理地控制设备。它从OS接受命令。控制器的任务是为OS提供一个简单的接口,每类设备控制器都不同的,故需要不同的软件进行控制。专门与控制器对话,发出命令并接收响应的软件,称为设备驱动程序

总线:计算机中的硬件是使用各种总线实现数据传输和通信的

10、启动计算机

在计算机启动时,BIOS开始运行。它首先检查所安装的RAM数量,键盘和其他基本设备是否已经安装并正常响应。接着,它开始扫描ISA和PCI总线并找出连在上面的所有设备。如果现有的设备和系统上一次启动时的设备不同,则配置新的设备。

然后,BIOS通过尝试存储在CMOS存储器中的设备清单决定启动设备。用户可以在系统刚启动之后进入一个BIOS配置程序,对设备清单进行修改。典型地,如果存在软盘,则系统试图从软盘启动,如果失败则试用CD-ROM,如果也失败则系统从硬盘启动。启动设备上的第一个扇区被读入内存并执行。这个扇区中包含一个对保存在启动扇面末尾的分区表检查的程序,以确定哪个分区是活动的。然后,从该分区读入第二个启动转载模块。来自活动分区的这个转载模块被读入操作系统,并启动之。

然后,操作系统询问BIOS,以获得配置信息。对每种设备,系统检查对应的设备驱动程序是否存在。没有则要求用户插入含有该设备驱动程序的CD-ROM。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始化有关表格,创建需要的任何背景进程,并在每个终端上启动登陆程序或GUI

11、进程

(1)进程本质上是正在执行的一个程序,与每个进程相关的是进程的地址空间

(2)地址空间是从某个最小值的存储位置(通常是零)到某个最大值存储位置的列表。在进程的地址空间中,进程可以进行读写,该地址空间中存放有可执行程序、程序的数据以及程序的堆栈

(3)除了地址空间,与每个进程相关的还有资源集,通常包括寄存器(含有程序计数器和堆栈指针)、打开文件的清单等运行该程序所需的所有其他资源

(4)进程基本上是容纳运行一个程序所需要所有信息的容器

(5)再理解地址空间:现在的OS运行在内存中同时运行多道程序,为了避免它们彼此相互干扰,每个进程有一些可以使用的地址集合,典型值是从0开始到某个最大值。一个进程可拥有的最大地址空间小于主存。在这种情况下,进程可以用满其地址空间,而且内存中也有足够的空间容纳该进程。在许多32位或64位地址的计算机中,分别有2^32后2^64字节的地址空间。如果一个进程有比计算机拥有的主存还大的地址空间,而且该进程希望使用全部内存,那怎么办?可以使用虚拟内存技术——>OS把部分地址空间装入主存,部分留在磁盘上,并且在需要时穿梭交换它们。本质上,OS创建了一个地址空间的抽象,作为进程可以引用地址的集合

12、文件

(1)创建文件、删除文件、读文件和写文件都需要系统调用

(2)Linux中   /Faculty/pa

Windows和Ms-Dos中   \Faculty\pa

(3)在读写文件之前,首先要打开文件,检查其访问权限。若权限许可,系统将返回一个小整数,称作文件描述符,供后续操作使用。若禁止访问,系统则返回一个错误码

(4)在UNIX中存在一种文件叫特殊文件。提供特殊文件是为了使I/O设备看起来像文件一般。有两类特殊文件:块特殊文件和字符特殊文件。

块特殊文件:指那些由可随机存取的块组成的设备,如磁盘

字符特殊文件:用于打印机、调制解调器和其他接收获输出字符流的设备

(5)管道是一种虚文件,它可连接两个虚进程

(6)shell:UNIX的命令解释器

13、系统调用

(1)任何单cpu计算机一次只能执行一条指令。如果一个进程正在用户态中,运行一个用户程序,并且需要一个系统服务,比如从一个文件读数据,那么它就必须执行一个陷阱或系统调用指令,将控制返回给在系统调用后面跟随着的指令。在某种意义上,进行系统调用就像进行一个特殊的过程调用,但是只有系统调用可以进入内核,而过程调用则不能

(2)下面对read系统调用进行细解:

count=read(fd,buffer ,nbytes);(它有三个参数:第一个参数指定文件,第二个指向缓冲区,第三个说明要独处的字节数)

几乎所有系统调用一样,它的调用由C程序完成

如果系统调用不能执行,不论是因为无效的参数还是磁盘错误,由于历史的原因C以及C++编译器使用逆序

第一个和第三个参数是值调用,但是第二个参数通过引用传递,即传递的是缓冲区的地址(由&指示),而不是缓冲区内容,接着是对库过程的实际调用。在可能由汇编语言写成的库过程中,一般把系统调用的编号放在操作系统所期望的地方,如寄存器中(第5步)。然后执行一个TRAP指令,将用户态切换到内核态,并在内核中的一个固定地址开始执行(第6步)。TRAP指令实际上与过程调用指令相当类似,他们后面都跟随一个来自远地位置的指令,以及供以后使用的保存在栈中的返回地址。

(然而TRAP指令与过程指令存在两个方面的差别。首先,切换到内核态。而过程调用指令并不改变模式。其次,不像给定过程所在的相对或绝对地址那样,TRAP指令不能跳转到任意的地址上。根据机器的体系结构,或者跳转到一个单固定地址上,或者指令中有一8位长的字段,它给定了内存中一张表格的索引,这张表格中含有跳转地址)

跟随在TRAP指令后的内核代码开始检查系统调用编号,然后发出正确的系统调用处理命令,这通常是通过一张由系统调用编号所引用的、指向系统调用处理器的指针表来完成(第7部)。此时,系统调用句柄运行(第8步)。一旦系统调用句柄完成其工作,控制可能会在跟随TRAP指令后面的指令中返回给用户空间库过程(第9部),这个过程接着以通常过程调用返回的方式,返回到用户程序(第10步)

为了完成整个工作,用户程序还必须清除堆栈,如同它在进行任何过程调用之后一样(第11步)。假设堆栈向下增长,如经常所做的那样,编译后的代码准确地增加堆栈指针值,以便清除调用read之前压入的参数。在这之后,原来的程序就可以随意执行了。

(在前面第9步中,我们提到“控制可能会在跟随TRAP后面的指令中返回给用户空间库过程”,这是有原因的。系统调用可能阻塞调用者,避免它继续执行。例如,如果试图读键盘,但是并没有任何键入,那么调用者就必须被阻塞。在这种情况下,OS会查看是否有其他可以运行的进程。稍后,当需要的输入出现时,进程会提醒系统注意,然后9-11步骤会接着进行。)

 

注意以下两方法的语义:

n=read(fd,buff,nbytes);把数据从一个文件读到缓冲区中

n=read(fd,buff,nbytes);把数据从缓冲区写到一个文件中

(3)用于进程管理的系统调用

shell如何fork(它创建原有进程的精确副本):在键入一条命令后,shell创建一个新的进程。这个子进程必须执行用户的命令。通过execve系统调用可以实现这一点

(4)在UNIX中的进程将其存储空间划分为三段:正文段(如程序代码)、数据段(如变量)以及堆栈段。数据段向上增长,而堆栈段向下增长






  • 13
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值