操作系统day2:绪论

操作系统的任务:
在相互竞争的程序之间有序地控制对处理器、存储器以及其他IO接口设备的分配
资源管理有两种形式实现多路复用资源:
1.时间复用:不同的程序或用户轮流使用同一种资源
2.空间复用:在若干运行程序之间分割内存,这样每一个运行程序都可同时入住内存

计算机的硬件组成:

1.处理器(CPU):

每个CPU的基本周期,从内存中取出指令,解码以确定其类型和操作数,接着执行这一条指令
CPU内专门的寄存器:程序计数器PC、堆栈指针、程序状态字寄存器PS
PS中有一个二进制位控制核心态和用户态两种模式。为了从操作系统中获得服务,用户程序必须使用系统调用陷入内核并调用操作系统。trap指令将用户态切换成内核态,并启用操作系统。

计算机是使用陷阱,而不是使用一条指令,来执行系统调用。多数陷阱是由硬件引起,用于警告有异常情况发生。
trap指令不能跳转到任意地址上。指令中有一8位长的字段,它给定了内存中一张表格的索引,这张表格中含有跳转地址

多线程允许CPU保持两个不同的线程状态,然后在纳秒级的时间尺度内来回切换。

多线程不提供真正的并行处理,在同一时刻只有一个进程在运行,但是线程的切换时间减少到纳秒数量级
每个线程在操作系统看来就像是单个的CPU。如果某一个时间在同一个CPU上调度两个线程,而让另一个CPU完全空转,这种选择远远不如在每个CPU上运行一个线程的效率高

2.存储器

存储器系统采用一种分层次的结构:(访问时间从小到大,容量从小到大)
寄存器,高速缓存,内存,磁盘,磁带

缓存:

任何缓存系统中都有若干需要尽快考虑的问题,包括
1)何时把一个新的内容放入缓存
2)把新内容放在缓存的哪一行上
3)在需要时,应该把哪个内容从缓存中移走
4)应该把新移走的内容放在某个较大的存储器的何处

现代CPU中的两个缓存:
L1缓存:CPU中,将已解码的指令调入CPU的执行引擎,用于处理频范使用的数据字,访问不存在任何延时
L2缓存:存放近来所使用过若干兆字节的内存字,访问会延时1或2个时钟周期

内存:

主存(RAM),ROM,EEPROM,flash memory,CMOS(保存当前时间和日期)

3.I/O设备

包括设备控制器和设备本身。
控制器是插在电路板上的一块或一组芯片,用于从操作系统接受命令,并完成数据的处理。
两者之间的中介程序是设备驱动程序,装入到操作系统中,只在核心态中运行

实现输入和输出的方式:
方式1:用户程序发出一个系统调用,内核将其翻译成一个对应设备驱动程序的过程调用,然后设备驱动程序启动I/O,并在一个连续不断的循环中检查该设备,看该设备是否完成了工作(一般有一些二进制位用来指示该设备仍在忙碌中)。I/O结束后,设备驱动程序把数据送到指定的地方
方式2:通过中断
中断的过程:操作系统day1:中断
方式3:为I/O使用一种特殊的直接存储器访问(DMA)芯片,而无需持续的CPU干预

同级别中断的I/O设备互相冲突时,解决方法是

4.总线

三个专门的总线
IDE:将磁盘和CD-ROM一类的外部设备与系统相连接
USB:将慢速I/O设备,例如键盘和鼠标,与计算机链接
SCSI:用于高速硬盘、扫描仪等需要较大带宽的设备

启动计算机

1)检查所安装的RAM数量,键盘和其他基本设备是否已安装并正常响应
2)扫描总线ISA和PCI并找出连在上面的设备
3)通过CMOS中的设备清单启动设备
4)操作系统询问BIOS,获得配置信息,检查设备驱动程序。若有,则将其调入内核,

其他操作系统概念:

1.进程

本质:正在执行的一个程序
与进程有关的的最关键的系统调用:进程创建,进程终止

一个名为命令解释器shell的进程从终端上读命令,创建一个新进程来执行编译程序。执行编译的进程结束后,shell执行一条系统调用来终结自己
shell体现了操作系统的许多特性,并很好的说明了系统调用的具体用法,多用于UNIX

2.地址空间

较复杂的操作系统允许在内存中同时运行多道程序。为了避免他们彼此互相干扰(包括操作系统),需要有某种保护机制。

3.文件系统

操作系统的一项主要功能是隐藏磁盘和其他IO设备的细节特性,并提供给程序员一个良好、清晰的独立于设备的抽象文件模型。

文件存储结构

文件的储存结构通常是目录层结构,如 \xxx\xxxxx\xxx

文件读写操作

创建、删除、读、写、关闭文件都需要系统调用
读写文件之前,先要打开文件,检查其访问权限。若权限许可,则返回一个小整数,称为文件描述符,供后续操作使用,否则返回一个错误码
UNIX中,特殊文件保存在/dev目录中,为了使IO设备看起来像文件一般,这样可以像使用系统调用读写文件一样读写IO设备

管道pipe

UNIX中,管道是一种虚文件,连接两个进程,若进程A想对进程B发送数据时,A把数据写到管道,B可以通过读该管道而得到数据

系统调用

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

操作系统内核的主要资源管理功能模块如下:
1.系统初始化模块:准备系统运行环境,最后创建进程运行命令解释程序/程序管理器。
2.进程管理模块:处理进程类系统调用(如进程创建/结束、进程间通讯等);进程调度。
3.存储管理模块:配合进程管理分配进程内存空间;处理存储类系统调用(如动态增加进程空间);虚存系统缺页处理。
4.文件管理模块:处理文件类系统调用。
5.外设管理模块:负责外设驱动,中断处理。

UNIX中,read可以实现系统调用中的文件管理。read有三个参数,一个指定文件,一个说明数据应存放的位置,一个说明应读出多少个字节

count=read(fd,buffer,nbytes)#返回实际读出的字节数

完成系统调用read的步骤:
在这里插入图片描述
一些重要的系统调用:
在这里插入图片描述

windows与unix

unix程序包括做各种处理的代码以及从事完成特定服务的系统调用
windows程序通常是一个事件驱动的程序,主程序等待某些事情发生,然后调用一个过程处理该事件

典型的事件包括被敲击的键盘、移动的鼠标、被按下的鼠标或插入的CD-ROM

unix中,系统调用与系统调用所使用的库过程(即上述表格提到的系统调用库函数)之间一一对应
windows中,程序员使用应用编程接口API获得操作系统的服务

操作系统结构

单体系统

整个过程以过程集合的方式编写,每个过程可以自由调用其他过程
构造实际的目标程序时,首先编译所有单个的过程,然后通过系统链接程序将它们链接成单一的目标文件。

层次系统

微内核

事实上,尽可能减少核心态中功能的做法更好,因为内核中的错误会快速拖累系统。
相反,可以把用户进程设置为具有较小的权限,这样,某一错误的后果就不会是致命的。
微内核设计就是基于这样的思想:为了实现高可靠性,将操作系统划分成小的、良好定义的模块,
只有一个模块--微内核--运行在核心态,其余的模块则作为普通用户进程运行

设备驱动器只能与授权的IO端口接触,对内核调用的访问也是按单个进程进行控制的。这些限制是让每个驱动和服务器只拥有完成其工作所需要的权限,极大限制了故障部件可能造成的危害。

客户机-服务器模式

客户端和服务器运行在不同的计算机上,他们通过局域或广域网连接。

虚拟机

Java虚拟机(JVM):
java编译器为JVM生成代码,这些代码以后可以由一个软件JVM解释器执行。JVM代码可以通过Internet传送到任何有JVM解释器的计算机上,并在该机器上执行。如果解释器正确地完成,还要对所输入的JVM进行安全性检查,然后在一种保护环境下执行,这样,这些程序就不能偷窃数据或进行其他任何有害的操作。

外核

依靠C的世界

操作系统通常包括很多大型C程序,与java程序环境非常不同

C语言

c语言比起java的一个典型特征是指针
c语言没有的包括内建字符串、线程、包、类、对象、类型安全、垃圾回收。
c语言分配存储空间通常使用malloc以及free库函数

头文件

项目

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值