您的位置:首页 > 理论基础

【操作系统】计算机操作系统基础

2017-02-23 11:00 246 查看

计算机操作系统

原博客地址【读书笔记】计算机操作系统 - 不忘初心 - CSDN

进程

基本概念



进程的状态





就绪(ready/waiting):进程已经获得除CPU外所有必要资源。多个“就绪进程”组成“就绪队列”。

执行(running):进程已获得CPU。

阻塞(blocked):正在执行的进程由于发生某事件(请求I/O,申请缓冲空间等)无法继续运行,放弃处理机处于暂停状态。

挂起(suspended):进程被换到“交换区”,包括“suspended and waiting”、“suspended and blocked”。

进程同步

在多道程序环境下,当程序并发执行时,由于资源共享进程合作,使同处于一个系统中的诸进程之间存在制约关系。进程同步的主要任务,是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性



进程同步与进程互斥:

进程同步是指生产者进程不能往一个满的资源池中添加资源,消费者进程不能从一个空的资源池中取资源,通过资源信号量实现。

进程互斥是指生产者进程之间,或消费者进程之间,应该互斥的访问临界资源,通过互斥信号量实现。



整型信号量:不满足“让权等待”

记录型信号量(增加阻塞队列):共享多个资源时导致死锁

AND型信号量(一次获取全部资源):一次只能获得或释放一个单位的临界资源

信号量集(对信号量实现加减n的操作):每个要访问临界资源的进程都必须自备同步操作wait(S)和signal(S)

管程:代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,共同构成一个操作系统的资源管理模块,我们称之为管程。管程被请求和释放资源的进程所调用。

管程由四部分组成:

① 管程的名称;

② 局部于管程内部的共享数据结构说明;

③ 对该数据结构进行操作的一组过程;

④ 对局部于管程内部的共享数据设置初始值的语句。

利用管程实现进程同步:

① 必须设置同步工具,如两个同步操作源于wait和signal

② 还需设置多个条件变量

进程通信

进程通信方式



消息传递



消息缓冲队列通信机制





线程

进程是资源分配的基本单位,线程是任务调度的基本单位。引入进程是为了使多道程序有条不紊的并发执行,提高资源利用率和系统吞吐量;引入进程是为了减少程序在并发执行时所付出的时空开销。

线程间的同步和通信

互斥锁:共享多个资源时导致死锁

互斥锁+条件变量:解决共享一个临界资源时的死锁问题。

信号量:

① 私用信号量:存放于应用程序的地址空间中,OS并不知道其存在,用于同一进程中各线程之间的同步;

② 公用信号量:存放于受保护的系统存储区中,由OS为它分配空间并进行管理,用于不同进程间或不同进程的线程之间的同步。

线程的实现方式

内核支持线程(KST):无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消、切换以及要求由系统设备完成的I/O操作,都是在内核空间中实现的。

用户级线程(ULT):创建、撤消、切换以及同步和通信,都无需内核的支持。内核完全不知道用户级线程的存在。

KST/ULT组合方式。

线程的实现

内核支持线程的实现:系统在创建一个新进程时,便为它分配一个任务数据区PDTA,其中包含若干个线程控制块TCB空间。在每一个TCB中可保存线程标识符、优先级、线程运行的CPU状态信息等。虽然这些信息与用户级线程TCB中的信息相同,但现在却是被保存在内核空间中。

用户级线程的实现:采用中间系统①运行时系统;② 内核支持线程(如下图)


处理机调度

调度层次



调度队列模型

仅具有进程调度的调度队列模型



具有高、低两级调度的调度队列模型



调度方式和调度算法的准则

面向用户的准则

① 周转时间短;

② 相应时间快;

③ 截止时间的保证;

④ 优先权准则;

面向系统的准则

① 系统吞吐量高;

② 处理机利用率好;

③ 各类资源的平衡利用;

调度算法

调度算法



多级反馈队列调度算法



存储器管理

存储层次



程序的装入和链接





程序的链接

静态链接——> 空间浪费,更新困难

① 链接时需要修改被调用模块内部的相对地址;

② 链接时还需要变换被调用模块的外部调用符号;

装入时动态链接:边装入边链接 ——> 便于修改和更新,便于实现对目标模块的共享。最常用。

运行时动态链接:将对某些模块的链接推迟到程序执行时才进行链接 ——> 影响应用程序性能,很少使用。

程序的装入

一定要注意编译时产生的目标程序,地址都是逻辑地址,起始地址都为0!

绝对装入方式——> 单道程序环境

① 编译时产生绝对地址的目标代码;

② 逻辑地址与物理地址完全相同;

可重定位装入方式——> 多道程序环境,不允许程序在运行时在内存中移动

① 编译产生的目标模块起始逻辑地址为0,其他地址相对于起始地址计算;

② 绝对物理地址=起始物理地址+相对地址(有效地址/相对逻辑地址);

③ 指令和数据地址的修改在装入时完成(静态重定位);

动态运行时装入方式:装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行,因此装入内存后的所有地址都仍是相对地址。为使地址转换不影响指令的执行速度,这种方法需要一个重定位寄存器的支持。

内存分配

连续分配



交换



页式管理

分页系统的地址变换机构:完成逻辑地址页号物理地址块号的映射

页内地址:0~11,4KB

页号:12~31,1M个



页表大多数驻留在内存中。平时,进程未执行时,页表的始址和页表的长度存放在本进程的PCB中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。

具有快表的地址变换机构



除页表寄存器(存放页表地址信息)外,增设高速缓冲寄存器/联想寄存器/快表(存放当前访问的那些页表项,存放约16~512个页表项,每个页表项占用1个字节)。

两级和多级页表

如果进程有1M个页表项,则该进程页表(含1M个页表项,每个页表项占1个字节)就要占用1MB的连续内存空间。解决办法:①+②

① 采用离散分配方式——>增加外层页表及外层页表寄存器,实现两级和多级页表;

② 将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入;

段式管理

分段的好处:

① 方便编程,将进程按照逻辑关系划分为若干个段;

② 信息共享,“页”只是存放信息的物理单位(块),并无完整的意义,“段”是信息的逻辑单位;

③ 信息保护;

④ 动态增长,有些段(尤其是数据段)在使用过程中会不断增长;

⑤ 动态链接,运行时先将目标程序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段调入内存并进行链接。(如果是运行时动态链接,就很少使用;如果引入虚拟存储器技术,则是装入时动态链接)。



分页和分段的主要区别

1、页是信息的物理单位,段是信息的逻辑单位;

2、页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。

3、分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。(分页之所以是一维的,原因在于分页的大小是固定的,且页码之间是连续的,操作的时候只需给出一个地址,就能够根据所给地址的大小与页面大小计算出在页码和页内地址,粗略举例,比如页面大小是4KB,给一个地址为5000,可以算出所在页码是1,页内地址是5000-4096=904,即在第二页的第904个位置。而分段的因为每段的长度不一样,必须给出段码和段内地址。)

段页式管理

地址结构:段号+段内页号+页内地址



地址变换过程:



虚拟存储器

指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

实现:

1、分页请求系统

1)硬件支持:

① 请求分页的页表机制;

② 缺页中断机构;

③ 地址变换机构;

2)软件支持:用于实现请求调页的软件和实现页面置换的软件;

2、分段请求系统(软硬件要求类似)

设备管理

I/O设备

分类



设备控制器



I/O通道



I/O控制方式



DMA



缓冲管理

单缓冲



双缓冲



循环缓冲

可能出现的问题(瓶颈)

Nexti 指针追赶上Nextg 指针,这种情况被称为系统受计算限制。(很少)

Nextg 指针追赶上Nexti 指针,这种情况被称为系统受I/O 限制。(常见)



公用缓冲池

① 组成:三种缓冲队列+四种缓冲区

三种缓冲队列:

空缓冲队列emq;

输入队列inq;

输出队列outq;

四种缓冲区

用于收容输入数据的工作缓冲区hin;

用于提取输入数据的工作缓冲区sin;

用于收容输出数据的工作缓冲区hout;

用于提取输出数据的工作缓冲区sout;

② 操作方法:为使诸进程能互斥地访问缓冲池队列,可为每一队列设置一个互斥信号量MS(type)。此外,为了保证诸进程同步地使用缓冲区,又为每个缓冲队列设置了一个资源信号量RS(type)。

③ 工作方式



I/O软件

分层



中断处理程序

处理过程

唤醒被阻塞的驱动进程

保护被中断进程的CPU环境

通常由硬件自动将处理机状态字PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中,然后把被中断进程的CPU现场信息(即包括所有的CPU寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中,因为在中断处理时可能会用到这些寄存器。



转入相应的设备处理程序

中断处理

恢复被中断进程的现场



设备驱动程序

处理过程

不同类型的设备应有不同的设备驱动程序,但大体上它们都可以分成两部分,其中,

​ 除了要有能够驱动I/O 设备工作的驱动程序外,

​ 还需要有设备中断处理程序,以处理I/O 完成后的工作。

1) 将抽象要求转换为具体要求

2) 检查I/O 请求的合法性

3) 读出和检查设备的状态

4) 传送必要的参数

5) 工作方式的设置

6) 启动I/O 设备

设备独立性软件

单用户系统中的LUT:由于系统中所有进程的设备分配情况都记录在同一张LUT中,因而不允许在LUT中具有相同的逻辑设备名,这就要求所有用户都不使用相同的逻辑设备名。



多用户系统中的LUT:为每个用户设置一张LUT。每当用户登录时,便为该用户建立一个进程,同时也为之建立一张LUT,并将该表放入进程的PCB 中。



设备分配

涉及的数据结构

设备控制表



控制器控制表



通道控制表



系统设备表



设备分配步骤

根据逻辑设备名查找SDT,找出该设备的DCT,分配设备

根据DCT找出COCT,分配设备控制器

根据COCT找出CHCT,分配通道

SPOOLing技术

(1) 输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O 设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用

户程序的输出数据。

(2) 输入缓冲区和输出缓冲区。为了缓和CPU 和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

(3) 输入进程SPi和输出进程SPo。这里利用两个进程来模拟脱机I/O 时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区

再送到输入井,当CPU 需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。



文件管理

文件和文件系统

文件系统的结构:是由文件管理部分和操作系统I/O部分组成的。

文件管理部分:操作系统内存中的文件对象,并按文件的逻辑格式将对文件对象的操作转化成对文件块的操作。

操作系统I/O部分:负责内存中的物理块与物理磁盘中的数据交换。

文件分类

通常,文件是由一系列的记录组成的。文件系统设计的关键要素,是指将这些记录构成一个文件的方法,以及将一个文件存储到外存上的方法。

文件的逻辑结构

​ 这是从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织(FileOrganization)。

例如,用户创建的txt、cpp、word、excel、ppt等,都属于文件的逻辑结构。

① 无结构文件:字符流,又称流式文件。–源程序、可执行文件、库函数等

② 有结构文件:由若干个相关记录组成,又称记录型文件,如下图。–数据结构、数据库



文件的物理结构

​ 又称文件的存储结构,指文件在外存上的存储组织形式。这不仅与存储介质的存储性能有关,而且与所采用的外存分配方式有关。

例如,采用FAT32、NTFS、EXT3、EXT4、Linux swap等,都属于文件的物理结构。

文件系统模型

文件系统管理的对象有:① 文件;② 目录;③ 磁盘空间;

模型层次图:



文件的逻辑结构

分类

1. 记录型文件

按记录的组织方式可划分为

① 顺序文件

顺序文件中记录的排序方式:

1)串结构,各记录之间的顺序与关键字无关,通常由时间决定。—-每次检索必须从头开始。

2)顺序结构,所有记录按关键字排序。—-采用折半查找、插值查找、跳步查找等来提高检索效率。



② 索引文件

定长记录文件—-顺序存取方便、直接存取方便

变长记录文件—-顺序存取方便、直接存取困难

为变长记录文件建立一张索引表,对主文件中的每个记录,在索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针(指向该记录在逻辑地址空间的首址)。由于索引表是按记录键排序的,因此,索引表本身是一个定长记录的顺序文件,从而也就可以方便地实现直接存取。



③ 索引顺序文件

索引顺序文件(Index Sequential File)可能是最常见的一种逻辑文件形式。它有效地克服了变长记录文件不便于直接存取的缺点,而且所付出的代价也不算太大。它将顺序文件中的所有记录分为若干个组(例如,50 个记录为一个组);为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。



④ 直接文件

根据给定的记录键值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址。这种由记录键值到记录物理地址的转换被称为键值转换(Key to addresstransformation)。

⑤ 哈希文件

目前应用最广的一种直接文件。它利用Hash 函数(或称散列函数),可将记录键值转换为相应记录的地址。但为了能实现文件存储空间的动态分配,通常由Hash函数所求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块,如下图所示。例如,若令K为记录键值,用A作为通过Hash函数H 的转换所形成的该记录在目录表中对应表目的位置,则有关系A=H(K)。通常,把Hash函数作为标准函数存于系统中,供存取文件时调用。



2. 流式文件

​ 其长度以字节为单位。对流式文件的访问,则是采用读/写指针来指出下一个要访问的字符。可以把流式文件看做是记录式文件的一个特例。在UNIX 系统中,所有的文件都被看做是流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理。

文件的外存分配方式

对换空间的管理:具有对换功能的OS中,将外存分为文件区(用于存放文件)和对换区(用于存放从内存中换出的进程)。由于通常的文件都是较长久的驻留在外存上,故对文件区管理的主要目标,是提高文件存储空间的利用率。为此,对文件区采取离散分配方式。然而,进程在对换区中驻留的时间是短暂的,对换操作又较频繁,故对对换空间(swap分区)管理的主要目标,是提高进程换入和换出的速度。为此,采取的是连续分配方式,较少考虑外存中的碎片问题。

连续分配

1、连续分配(Continuous Allocation)要求为每一个文件分配一组相邻接的盘块。一组盘块的地址定义了磁盘上的一段线性地址。

2、物理结构:顺序式。

3、如同内存的动态分区分配一样,随着文件建立时空间的分配和文件删除时空间的回收,将使磁盘空间被分割成许多小块,这些较小的连续区已难于用来存储文件,此即外存的碎片。同样,我们也可以利用紧凑的方法,将盘上所有的文件紧靠在一起,把所有的碎片拼接成一大片连续的存储空间。



链接分配

1、分类:

① 隐式链接

在采用隐式链接分配方式时,在文件目录的每个目录项中,都须含有指向链接文件第一个盘块和最后一个盘块的指针。

隐式链接分配方式的主要问题在于:它只适合于顺序访问,它对随机访问是极其低效的。



② 显式链接—-FAT/NTFS

把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表在整个磁盘仅设置一张。表的序号是物理盘块号,从0 开始,直至N-1;N为盘块总数。在每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的FCB 的“物理地址”字段中。由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的所有盘块号都放在该表中,故把该表称为文件分配表FAT(File Allocation Table)。



索引分配

为每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多盘块号的数组。在建立一个文件时,只需在为之建立的目录项中填上指向该索引块的指针。

1、分类:

① 单级索引分配;



② 多级索引分配;



③ 混合索引分配;



总结







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统 计算机