操作系统知识(中级软件评测师)

7 篇文章 4 订阅
1 篇文章 0 订阅

操作系统概述

应用软件
其他系统软件(数据库系统、其他预演环境
操作系统(系统软件
计算机硬件

作用:
(1)通过资源管理,提高计算机系统的效率;(系统软件)
(2)改善人机界面,向用户提供友好的工作环境。(人机交互)
分类:
(1)批处理操作系统:把一系列指令写成一个批作业,计算机在执行这个批作业的时候不需要人工一条一条的输入,然后提交给计算机,计算机会按照指令依次执行可以减少人工的操作,提高计算机运行的效率。
(2)分时操作系统:CPU分成很多个时间碎片,每个碎片分给不同的作业,使得每个作业宏观上都在运行。
(3)实时操作系统:在可以接受的范围内,提交作业可以产生结果,系统是足够快的
(4)网络操作系统:提供网络相关的功能
(5)分布式操作系统:网络操作系统更高层次的一个形态,有更高的可靠性、可扩展性。将网络中物理区域不在同一个的计算机组合在一起形成网络系统,通过分布式系统进行网络资源的分布和调用。
(6)微机操作系统
(7)嵌入式操作系统:体系较小

进程管理及PV

进程的概念及三态模型

进程:是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。它由程序块 、进程控制块(PCB)和数据块三部分组成。
运行结束以后进程就消失了

进程与程序的区别:

程序是静态的,进程是动态的,程序是存储在某种介质上的二进制代码,进程对应了程序的执行过程,系统不需要为一个不执行的程序创建进程,一旦进程被创建,就处于不断变化的动态过程中,对应了一个不断变化的上下文环境。

程序是永久的,进程是暂时存在的。程序的永久性是相对于进程而言的,只要不去删除它,它可以永久的存储在介质当中。

三态模型:

运行态:进程处于运行态,当前进程已经获取到了CPU资源,正在利用CPU进行运算

就绪态:进程处于就绪态,当前进程已经准备好了运行的所有资源,等待CPU的调度

阻塞态:进程处于阻塞态,当前进程没有准备好运行的资源

在这里插入图片描述

进程的同步与互斥

进程控制:
进程控制是指进程从创建到消亡整个过程进行全程的控制。

原语:
为实现某个目的,由一系列指令组成的指令集合,是个原子的指令集,不可再分割。(原语里面的指令要么都执行,要么都不执行,执行完毕后就实现了一个目的)

同步:
两个进程协作去完成某个事情,是一种直接制约关系

互斥:
某个资源被一个进程占用之后,其他进程就无法使用该资源,必须进行等待,是一种间接制约的关系

临界资源:
虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。

临界区:
对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区

PV操作

1、信号量
是一种特殊的变量,一个整数
S>=0 表示某资源的可用的数量
S<0 则其绝对值表示阻塞队列中等待该资源的进程数

2、PV操作
在这里插入图片描述
P操作:申请资源的操作,使信号量的值减1,减1后小于0,则说明当前S资源的数量<=0,当前没有可用的资源S分配给申请的进程,当前进程进入资源S的等待队列

V操作:释放资源的操作,使信号量的值加1,加1后小于等于0,说明当前S资源的队列中有进程在排队,系统就会在等待队列中唤醒一个进程执行

PV必须成对出现

例:
1、互斥模型

多个V进程共享一台打印机的问题:
P(S);
使用打印机;
V(S);
后续代码;

互斥信号量S的初值为1。

2、同步模型

单个缓冲区生产者、消费者问题:
生产者–>市场–>消费者

生产者:消费者:
生产一个产品;
P(S1);P(S2);
送产品到缓冲区;从缓冲区中取产品
V(S2)P(S1)

例:(互斥)
银行办理业务,开放两个窗口,有四个人(P1、P2、P3、P4)办理业务
对于四个进程P来说,有两个可用资源,属于互斥资源,信号量S初始值S=2(对于互斥类资源,资源数=信号量值)

在这里插入图片描述
例:(同步)
单缓冲区

生产者:消费者:
生产一个产品;
P(S1);P(S2);
送产品到缓冲区;从缓冲区中取产品
V(S2)P(S1)

起初:
缓冲区是空的,生产者可以往里面放产品,生产者需要的资源是缓冲区里面的空位置 S1=1
缓冲区是空的,消费者无法取产品,消费者需要的资源是缓冲区里面的产品 S2=0
生产者生产一个产品,P(S1),S1-1=0>=0,说明生产者需要的缓冲区这个资源有起码有一个,则生产者获得缓冲区这个资源后继续向下执行,把生产的产品放到缓冲区里面;V(S2)S2是消费者需要的资源,S2+1=1>0,有了消费者所需要的资源后唤醒消费者进程;1此时生产者进程无法再进行,S1-1=-1<0说明没有生产者需要的资源了,生产者进程进入S1的阻塞队列;
P(S2),S2-1=0>=0,说明有消费者进程所需要的资源不用进入阻塞队列,继续向下执行,消费者消费掉缓冲区里面的产品后,缓冲区的空位置变成了1,生产者需要的资源有了,V(S1)S1+1=1>=0,从生产者阻塞队列唤醒生产者进程;

线程

1、两个基本属性:
可拥有资源的独立单位
可独立调度和分配的基本单位

2、线程与进程的关系:
线程:作为调度和分配的基本单位;
进程:作为独立分配资源的单位;
线程是进程中的一个实体,线程可与同属于一个进程的其他线程共享拥有的资源。

3、线程拥有的必须的资源:
程序计数器、一组寄存器、栈等。
一个进程下可以有多个线程

进程资源图

在这里插入图片描述

死锁

死锁问题

进程管理是操作系统的核心,但如果设计不当,就会出现死锁问题。如果一个进程再等待一个不可能发生的事情,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。
在这里插入图片描述
安全状态:
进程按照某一定的顺序先后依次执行,能够使得所有的进程都运行完成而不产生死锁。

系统不发生死锁所需的自小资源数:
每个进程需要N个资源,有K个进程,至少需要K*(N-1)+1个资源,无论怎么分配,都不会发生死锁
给每一个进程分配进程所需的资源数的最大值减一求和,还剩下多余的一个资源
例:
P1需要4个资源,P2需要5个资源,P3需要5个资源,则系统有((4-1)+(5-1)+(5-1))+1=12个资源,无论怎么分配都不会产生死锁。

银行家算法—死锁避免算法

分配资源的原则:
当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程;
进程可以分期请求资源,但请求总数不能超过最大需求量;
当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总数能使进程在有限时间里得到资源。

应用条件:
1、 在固定数量的进程中共享数量固定的资源
2、 每个进程预先指定完成工作所需的最大资源的数量
3、 进程不能申请比系统中可用资源总数还多的资源
4、 进程等待资源的时间是有限的
5、 如果系统满足了进程对资源的最大需求,那么进程应该再有限的时间内使用资源,然后归还给系统

变量
n:系统中进程数量,系统有n个进程
m:资源类数量,系统中有m类资源

Available:ARRAY[1…m] of integer;是个长度为m的数组,代表每类资源的可用的数量。
Max:APPAY[1…n,1…m] of integer;是个n行m列的二维数组,代表了每个进程对各类资源的最大需求量。
Allocation:ARRAY[1…n,1…m] of integer;是个n行m列的二维数组,代表了每个进程当前对各类资源的拥有量。
Need:ARRAY[1…n,1…m] of integer;是个n行m列的二维数组,代表了当前每个进程对各类资源的需求量。
Request:ARRAY[1…n,1…m] of integer;是个n行m列的二维数组,代表了本次每个进程对各类资源的请求的数量。

简记符号:(假设只有一种资源的情况)
Available:系统可用资源的数量
Max[i]:进程i最多需要资源的数量
Allocation[i]:进程i已经分配的资源的数量
Need[i]:进程i还需要的资源的数量
Request[i]:进程i本次请求的资源的数量

银行家算法基本流程
当进程Pi提出资源申请时,系统执行下列步骤:
(1)若Request[i]<Need[i],转(2);
否则,报错返回;
(2)若Request[i]<=Avaliable,转(3);
否则,报错返回;
(3)假设系统分配了资源,则有:
Available=Available-Request[i];
Allocation[i]=Allocation[i]+Request[i];
Need[i]=Need[i]-Request[i];
分配结束后进入到系统进程与资源的一个新的状态,判断系统的新状态时安全的,则进行分配;如果进行分配后状态时一个不安全的状态,则恢复原来的状态,进程等待。

安全性检查
Work :存放了当前可用资源的数量(M)
Finish 初始化为false:(N)没有处理的进程
(1) Work=Available;Finish=false
(2) 寻找满足条件的进程i
a. Finish[i]==false 找到没处理的进程i
b. Need[i]<=Work 并且进程i所需要的资源的数量 小于等于系统中可用的资源的数量当前系统中的资源可以满足某个进程i,说明把当前系统中的可用资源给i后,进程i运行结束后就可以把i的资源全部回收
c. 如果不存在这样的进程,转到(4)
(3) Work=Work+Allocation[i]可以将i的资源进行回收,放到系统的可用资源里
Finsh[i]=true进程i得到所有的资源后,运行结束
转(2)
(4) 若对所有i,Finsh[i]==true,则系统处于安全状态,否则系统处于不安全状态
基本思想:当前的剩余资源可以满足某一个进程未来需要,并且可以迭代循环到最后能够满足所有进程的资源需要,找出一个安全序列

例题:
有三类资源A(17)、B(5)、C(20)。有5个进程P1-P5.
T0时刻系统状态分配如下
在这里插入图片描述
(1)T0时刻是否为安全状态,给出安全序列。
(2)T0时刻,P2:Req(0,3,4)能否分配,为什么?
(3)在(2)的基础上,P4:Request(2,0,1),能否分配,为什么?
(4)在(3)的基础上,P1:Request(0,2,0),能否分配,为什么?

答:
(1)
在这里插入图片描述

且根据已分配和A(17),B(5),C(20)可以求出work = (2 3 3)
P4 Need < work 给P4分配,work = work + 已分配 = (4 3 7)
P2 Need < work 给P2分配,work = work + 已分配 = (8 3 9)
P3 Need < work 给P3分配,work = work + 已分配 = (12 3 14)
P5 Need < work 给P5分配,work = work + 已分配 = (15 4 18)
P1 Need < work 给P1分配,work = work + 已分配 = (17 5 20)
可得T0时刻为安全状态,安全系列为: P4 P2 P3 P5 P1
(安全序列不唯一)

(2)
P2:Request(0,3,4) > work(2 3 3)
故P2:Request(0,3,4)时不能分配

(3)
P4:Request(2,0,1) < work(2 3 3)
先假设分配给P4,看分配后能否得到一个安全状态,更新资源分配表:
在这里插入图片描述
P5 | 4 2 4 | 3 1 4 | 1 1 0 |
此时 work = (0 3 2)
P4 Need < work 给P4分配,work = work + 已分配 = (4 3 7)
P2 Need < work 给P2分配,work = work + 已分配 = (8 3 9)
P3 Need < work 给P3分配,work = work + 已分配 = (12 3 14)
P5 Need < work 给P5分配,work = work + 已分配 = (15 4 18)
P1 Need < work 给P1分配,work = work + 已分配 = (17 5 20)
可得安全状态,安全系列为: P4 P2 P3 P5 P1
故P4:Request(2,0,1)可以分配

(4)
在(3)中,work已更新为(0 3 2)
P1:Request(0,2,0) < work(0 3 2),
先假设分配给P1,看分配后能否得到一个安全状态,更新资源分配表:
在这里插入图片描述
此时 work = (0 1 2)
P1-P5所有的 Need 都大于 work,已不能满足任何进程的需要,
系统进入不安全状态,因此不能分配资源。

存储系统

分区存储

在这里插入图片描述
在这里插入图片描述

算法

某计算机系统的内存大小为128K,采用可变分区分配方式进行内存分配,当前系统的内存分配情况如下图所示,现在有作业4申请内存9K,几种不同的存储分配算法在分配中会产生什么样的结果?
在这里插入图片描述

一、首次适应算法(First Fit):该算法从空闲分区链首开始查找,直至找到第一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。
在这里插入图片描述

 特点: 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件。
 缺点:低地址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低地址部分开始,会增加查找的开销。

二、最佳适应算法(Best Fit):该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销
在这里插入图片描述

特点:每次分配给文件的都是最合适该文件大小的分区。
缺点:内存中留下许多难以利用的小的空闲区。

三、最坏适应算法(Worst Fit):最坏适应算法是将输入的作业放置到主存中与它所需大小差距最大的空闲区中。空闲区大小由大到小排序。
在这里插入图片描述

  特点:尽可能地利用存储器中大的空闲区。
  缺点:绝大多数时候都会造成资源的严重浪费甚至是完全无法实现分配。

关于三种放置策略的讨论:首次适应算法、最佳适应算法、最坏适应算法的队列结构。

页式存储

**原理:**把内存和作业划分成大小相等的块
在分页系统中,允许将作业(进程)的任一页装入到内存中的任一可用的物理块中,但进程的地址空间本来是连续的,若把他分页后装入到不相邻的物理块中,要保证系统仍能正确运行,就要实现从进程的逻辑地址变换为内存的物理地址。
所以,系统为每个进程建立一张页面映射表,简称页表。
在这里插入图片描述
**页内地址:**告诉我们块(页)的大小,最多可以存放的作业块的大小(类似于仓库划分了很多小格子,每个小格子的容积是多大)
页号:内存最多可以划分多少页

1、一个进程对应一张页表
2、进程的每一页对应一个页表项
3、每个页表项由页号和块号组成
4、页表记录进程页面和世界存放的内存块之间的对应关系
5、每个页表项的长度是相同的,页号是隐含的

优点:利用率高,碎片小,分配及管理简单
缺点:增加了系统开销;可能产生抖动现象

段式存储

在这里插入图片描述

磁盘管理

磁盘及位示图

在这里插入图片描述

四种磁盘调度算法
1、先来先服务算法(FCFS)First Come First Service

它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

2、最短寻道时间优先算法(SSTF) Shortest Seek Time First

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

3、扫描算法(SCAN)电梯调度

扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

4、循环扫描算法(CSCAN)

循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

磁盘读数据的时间
(找道时间)+(找扇区时间)+(传输时间)
注:磁盘是不停的旋转的

位示图
是利用二进制的一位来表示磁盘中的一个盘块的使用情况,其值为0时,表示对应的盘块空闲;为1时。表示已分配
先判断块的标号从开始还是从1开始。

文件系统

树形目录结构

在这里插入图片描述
绝对路径:从根开始的路径(/D2/W3/F4)
相对路径:相对于当前位置的路径(D2/W3/F4)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中级软件设计师需要具备以下知识点: 1. 编程语言:熟悉主流编程语言,如Java、C++、Python等,掌握其语法和常用库函数的使用。 2. 数据结构与算法:掌握常见的数据结构,如链表、栈、队列、树等,并了解它们的特点和应用场景。熟悉常用的算法,如排序、查找、图算法等,并能够分析算法的时间复杂度和空间复杂度。 3. 操作系统:了解操作系统的基本原理,如进程管理、内存管理、文件系统等。熟悉Linux操作系统的常用命令和Shell脚本编程。 4. 数据库:熟悉关系数据库的设计和操作,在MySQL、Oracle等数据库管理系统中能够编写高效的SQL语句进行数据的增删改查。了解NoSQL数据库的基本概念和使用。 5. 网络编程:了解计算机网络的基本原理,熟悉TCP/IP协议栈和常用的网络编程技术,如Socket编程。 6. 设计模式:了解常用的设计模式,如单例模式、工厂模式、观察者模式等,能够根据需求选择合适的设计模式进行软件设计。 7. 软件开发工具:熟练使用常用的开发工具,如Eclipse、IntelliJ IDEA等,能够进行代码的编辑、编译、调试和版本控制。 8. 软件测试:了解软件测试的基本原理和方法,熟悉常用的测试工具和测试框架,能够编写高质量的单元测试和集成测试。 9. 项目管理:了解软件开发项目的基本流程和方法,熟悉常用的项目管理工具和方法论,如Scrum、敏捷开发等。 10. 系统架构和设计:具备系统架构设计的能力,能够根据需求进行系统的模块划分和接口设计,并能够进行系统性能优化和扩展设计。 总之,中级软件设计师需要全面掌握软件开发的各个方面,包括编程语言、数据结构与算法、操作系统、数据库、网络编程、设计模式、测试、项目管理等,以及具备系统架构和设计的能力。熟练掌握这些知识点,不仅能够编写高质量的代码,还能够进行系统级的设计和优化,提高软件的性能和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值