计算机操作系统知识点总结(一文搞定!)

操作系统架层次结构:硬件之上,应用程序之下(系统软件)

第一章

一、操作系统的功能

系统资源的管理者——安全、高效

1. 处理机管理

2. 存储器管理

3. 文件管理

4. 设备管理

向用户提供服务

用户接口还包括GUI图形界面

对硬件机器的扩展

二、操作系统的特征

并发:计算机系统同时存在多个运行的程序(一段时间内),需要OS管理和调度。并行是同一个时间点(区别)

共享:”同时“访问/互斥共享,系统资源可供内存中多个并发进程共同使用

虚拟:把一个物理上的实体变为若干个逻辑上的对应物(虚拟技术中的空分、时分复用技术)

异步:程序的执行不是一管到底,而是走走停停,速度不可知。但运行环境相同,程序结果也相同

三、操作系统的运行机制和体系结构

操作系统内核

内核时计算机上配置的底层软件,是操作系统最基本最核心的部分

微内核:时钟管理、中断处理、原语(结构清晰、方便维护但效率低)

大内核:进程管理、处理器管理、内存管理(性能高但结构混乱、难以维护)

四、中断和异常

中断机制实现了多道程序并发执行

本质:发生中断就需要操作系统介入,开展管理工作。(中断可以使CPU从用户态切换为核心态)

中断分为内中断(与当前执行指令有关)和外中断(与当前执行指令无关)

内中断分为自愿中断和强迫中断

外中断分为外设请求和人工干预

对于外部中断信号的处理:

1. 在每个指令执行完时,都需要检查是否有外部中断信号

2. 若检测到了,需要先保护被中断进程的CPU环境

3. 根据中断信号类型转入相应的中断处理程序

4. 恢复环境,退出中断,返回原进程

五、系统调用

按功能分类(在核心态下进行):

1. 设备管理

2. 文件管理

3. 进程管理

4. 进程通信

5. 内存管理

系统调用和库函数的区别:有的库函数会涉及系统调用,有的不涉及

第二章

一、进程的定义、组成、组织方式、特征

定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位,由程序段、数据段和PCB组成,PCB是进程存在的唯一标志。

组织:链接方式、索引方式

特征:动态性、并发性、独立性、异步性、结构性

二、进程的状态和转换

五种进程的状态:

进程状态的转换:

 三、进程控制

进程控制就是实现进程状态的转换

用原语实现进程控制,原语的特点是执行期间不允许中断(开关中断指令是特权指令)

 四、进程通信

共享存储:使用共享空间来实现通信(互斥访问)

        1. 基于数据结构的共享

        2. 基于存储区的共享(高级通信)

管道通信

 管道采用半双工通信(互斥访问),没有写满就不允许读,没读空就不允许写

消息传递:类似于计算机网络的报文,直接通信和间接通信(信箱通信方式)

五、线程概念和多线程模型

线程是基本的CPU执行单元,是程序执行流的最小单位

 用户级线程:所有的线程管理工作由应用程序负责

内核级线程(处理机分配的单位):线程管理工作由操作系统内核完成

多线程模型(用户级线程映射到内核级线程):多对一(并发度低)、一对一(开销大)、多对多

六、处理机的调度

七、进程调度的时机、切换与过程、方式

进程切换:

1. 对原来运行进程各种数据的保存

2. 对新的进程各种数据的恢复

进程的切换是有代价的,频繁进行进程调度、切换会导致效率降低。

八、调度算法评价指标

1.CPU利用率 

利用率 = (忙碌时间/总时间)

2. 系统吞吐量

系统吞吐量 = (总共完成了多少道作业/总共花的时间)

3. 周转时间

从作业被提交给系统开始到作业完成为止所花费的时间

平均周转时间:周转时间之和/作业数

带权周转时间:作业周转时间/作业实际运行时间,同理也有平均带权周转时间

4. 等待时间

处于等待处理及状态时间之和

5. 响应时间

用户提交请求到首次产生响应所用的时间

九、FCFS SJF HRRN调度算法(交互性糟糕)

1. 先来先服务(FCFS)

按照作业/进程到大的而先后顺序进行服务

2. 短作业优先(SJF)

最短的作业/进程优先得到服务,有抢占式和非抢占式(默认)两种

3. 高响应比优先(HRRN)

计算响应比,(等待时间+要求服务时间)/要求服务时间

十、时间片轮转、优先级调度、多级反馈队列(适用于交互式系统)

1. 时间片轮转

如果时间片太大,算法会退化为FCFS,时间片太小,频繁切换会降低效率

2. 优先级调度

 

3. 多级反馈队列

十一、进程同步、进程互斥

十二、进程互斥的软件实现方法

1. 单标志法

违背了空闲让进的原则

2. 双标志先检查法

违背了忙则等待原则

3. 双标志后检查法

违背了空闲让进和有限等待原则

4. peterson算法

十三、进程互斥的硬件实现方法

1. 中断屏蔽方法

 2. TestAndSet指令

3. Swap指令

十五、 信号量机制 

 用一个整型信号量,用来标识系统中某种资源的数量(不满足让权等待原则)。

记录型信号量:一个记录型数据结构表示

十六、用信号量实现进程互斥、同步、前驱关系

互斥信号量初始化为1 , 同步信号量初始化为0

十七、生产者-消费者问题(互斥、同步的综合问题)

 实现互斥的P操作,一定要在实现同步的P操作之后(引发死锁)

V操作的顺序不会造成进程阻塞

十八、多生产者-多消费者

缓冲区大小大于1时,需要设置互斥信号量来实现互斥访问缓冲区。

十九、吸烟者问题

二十、读者-写者问题

上述算法由于源源不断的读进程会导致写操作等待时间过久,饿死的问题。 

使用count计数器,来判断进程是否是第一个和最后一个读进程,从而做出不同的处理,再通过互斥信号量来实现代码执行一气呵成的问题。 

二十一、哲学家进餐问题

二十二、管程

由于信号量机制的编写困难,容易出错

 

二十三、死锁

死锁的概念:并发环境下,各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进。

死锁产生的必要条件:

1. 互斥条件:只有对必须互斥使用的资源争抢,才会导致死锁。

2. 不剥夺条件: 进程获得资源未使用完前,不能被其他进程强行夺走,只能主动释放。

3. 请求和保持条件:进程已经保持了至少一个资源,有提出了新的资源请求,进程阻塞,又对已有资源不放。

4. 循环等待条件:存在一个进程资源的循环等待链。

什么时候会发生死锁:

死锁的处理策略:

预防死锁(静态策略):

1. 破坏互斥条件:使用SPOOLing技术将独占设备在逻辑上改造成共享设备。

2. 破坏不剥夺条件:处理机资源强行剥夺给优先级更高的进程(适用于易保存和恢复状态的资源)。

3. 破坏请求和保持条件:使用静态分配,运行前一次申请完所需所有资源。

4.. 破坏循环等待条件:顺序资源分配法,给资源编号,进程必须编号递增的顺序请求资源。

避免死锁(动态策略):

处于不安全状态有可能会发生死锁。使用银行家算法来预判此次分配是否会防止系统进行不安全状态。

 死锁的检测和解除:

 

二十四、内存的基础知识

内存是存放数据(快速)的硬件,程序执行前需要先放到内存中才能被CPU处理。

三种连接模式(形成完整的逻辑地址):

三种装入方式(形成物理地址):

绝对装入(适用于单道程序环境):

 静态重定位:

 动态重定位(现在使用):

 二十五、内存管理的概念

 二十六、覆盖与交换

覆盖技术(程序大小超过物理内存总和):

 交换技术:

 注意:PCB不会被换出外存

二十七、连续分配管理方式(内存空间的分配与回收)

连续分配:系统为进程分配的内存必须连续。

单一连续分配:

 固定分区分配:

动态分区分配:

 对于分区的分配和回收需要需要对分区表或者分区链进行改变。

 可以通过紧凑技术来解决外部碎片。

二十八、动态分区分配算法

首次适应算法

最佳适应算法

但这种分配方式会产生很多的外部碎片。

最坏适应算法

 邻近适应算法

二十九、基本分页存储管理的基本概念

三十、基本地址变换机构

 

三十一、具有快表的地址变换机构

三十二、二级页表

三十三、基本分段存储管理

分段、分页管理的对比:

分段比分页更容易实现信息的共享和保护(页面不是按照逻辑模块划分)。

三十四、段页式管理方式

分页 、分段管理的优缺点:

段页式管理结构

三十五、虚拟内存的基本概念

传统存储管理方式的特征、缺点:

虚拟内存的定义和特征:

 请求分页管理方式:

页面置换算法:

最佳置换算法(OPT)——淘汰以后永不使用的页面,或者再最长时间内不被访问的页面。

先进先出置换算法(FIFO):淘汰最早进入内存的页面。(实现简单,算法性能差)

最近最久未使用置换算法(LRU):逆向扫面,淘汰最久未使用的页面。

缺点:需要专门的硬件支持,实现困难,开销大。

时钟置换算法(CLOCK):

页面分配策略:

第四章

一、文件的逻辑结构

无结构文件:由一系列二进制流或字符流组成。

有结构文件:由一组相似记录组成,每条记录由若干数据项组成,

顺序文件

 索引文件

 索引顺序文件

 多级索引顺序文件

二、文件目录

三、文件的物理结构(文件分配方式)

文件的数据应该怎样存在外存中??

连续分配

要求每个文件在磁盘上占有一组连续的块。

1. 支持顺序访问和直接访问(随机访问)。

2. 连续分配的文件在顺序读写时,速度最快。

3. 物理上采用连续分配的文件不方便扩展,并且连续分配存储空间利用率低,会产生难以利用的磁盘碎片。

链接分配—隐式链接

 但方便文件拓展,且不会产生磁盘碎片。

链接分配—显式链接

通过文件分配表来表示磁盘块的链接(文件分配表需要占用一定存储空间)

索引分配

 链接方案

多层索引

混合索引

四、文件存储空间管理 

空闲表法(适用于连续分配)

 空闲链表法

 

 

位示图法

 

成组链接法(UNIX)

 

五、文件的基本操作

六、文件共享 

让多个用户共享使用同一个文件。

基于索引结点的共享(硬链接)

 基于符号链的共享(软链接)— 访问速度比硬链接慢

七、 文件保护(口令保护、加密保护、访问控制)

 八、文件系统的层次结构

 

九、磁盘的结构

磁盘表面由一些磁性物质组成,用磁性物质来记录二进制数据。

 

 

十、磁盘调度算法

一次磁盘读写需要的时间:

 操作系统的磁盘调度算法是为了优化寻道时间。

先来先服务算法(FCFS)— 根据请求访问磁盘的先后顺序进行调度

最短寻找时间优先(SSTF)— 优先处理的磁道是与当前磁头最近的磁道

扫描算法(SCAN)— 只能到最外侧才能往内移动,移动要最内侧再往外移动

LOOK调度算法 — 在SCAN算法基础上,加了一个观察,如果移动方向没有请求,就掉头

循环扫描算法(C-SCAN)— 在SCAN算法基础上,返回时直接快速移动到起始端而不处理任何事

还有C-LOOK算法同C-SCAN在SCAN上的改进,不过多介绍。

十一、减少磁盘延迟时间的方法

将目标扇区转到磁头下方的时间

 

十二、磁盘的管理

第五章

一、I/O 控制器

CPU和I/O设备机械部件之间的“中介”

二、I/O 控制方式 

程序直接控制方式

采用轮询的方式不断检查状态寄存器状态,CPU干预频率高,每次读/写一个字。

中断驱动方式

DMA方式

1. 数据传送单位为块

2. 数据的流向可以直接从设备到内存,内存到设备

3. 仅在传送一个或多个块开始和结束时,才需要cpu干预

 

通道控制方式

 

 

总结

 

二、I/O 软件层次结构

 

三、I/O 核心子系统

在I/O 软件层次结构中,红色的三个结构为I/O 核心子系统

假脱机技术

脱机— 脱离主机的控制进行的输入/输出操作

设备的分配与回收 

设备的分配:

安全分配方式 —— 为进程分配一个设备后会被阻塞

不安全分配方式 —— 分配设备后不会被阻塞

静态分配 —— 进程运行前为其分配全部所需资源,运行结束后归还资源

动态分配 —— 进程运行过程中动态申请资源

缓冲区管理

缓冲区的作用

1. 缓和CPU和I/O 设备之间的速度不匹配问题

2. 减少CPU的中断频率

3. 解决数据粒度不匹配问题

4. 提高CPU和I/O 设备间的并行性

 

 

  • 19
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中的eval()函数是一个内置函数,它可以将一个字符串作为代码来执行。它的基本用法是将一个字符串当作Python表达式来执行,并返回表达式的结果。下面是对Python eval()函数的一些总结: 1. eval()函数的基本语法如下: ``` eval(expression[, globals[, locals]]) ``` 其中,expression为需要执行的Python表达式,globals和locals为可选参数,分别表示全局和局部命名空间字典。 2. eval()函数可以执行任何Python表达式,包括函数调用、赋值语句等。例如: ``` x = 1 y = 2 print(eval("x + y")) ``` 输出结果为:3 3. eval()函数还可以执行包含控制语句的表达式,例如if语句、for循环语句等。但是要注意,eval()函数执行的代码必须是安全可靠的,否则可能会有安全风险。例如: ``` x = 1 y = 2 z = eval("if x > y: x else: y") print(z) ``` 输出结果为:2 4. eval()函数还可以执行包含异常处理语句的表达式。例如: ``` try: eval("1/0") except ZeroDivisionError as e: print("Error:", e) ``` 输出结果为:Error: division by zero 5. eval()函数还可以接受一个字典作为globals参数,用于指定全局命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {"x": 2, "y": 3})) ``` 输出结果为:5 6. eval()函数还可以接受一个字典作为locals参数,用于指定局部命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {}, {"x": 2, "y": 3})) ``` 输出结果为:5 7. eval()函数的返回值为表达式的结果。例如: ``` x = 1 y = 2 z = eval("x + y") print(z) ``` 输出结果为:3 总之,eval()函数是Python中非常有用的一个内置函数,它可以让我们在运行时执行动态的Python代码。但是要注意,使用eval()函数时需要谨慎,避免因为执行不安全的代码而导致安全问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值