操作系统

1. 处理机调度算法

  • 先来先服务算法:(FCFS, First Come First Serverd),优点算法简单,如果时间短的进程排在了处理时间长的进程后面,就需要很长时间才能执行。

  • 短进程优先算法:运行时间短的进程先执行,但是可能导致,运行时间长的进程一直执行不到。

  • 最高响应比优先算法:采用等待时间与,进程运行时间比值的策略,解决了,执行时间长的进程,一直等不到资源的问题,但是不能抢占

  • 时间片轮转算法:给每一个进程分配一定的时间片,时间片到期,执行时钟中断,交互性比较好,但是在上下文切换时会有额外的系统开销(时间片根据经验值来设(10ms, 用在上下文切换时间为1ms))

  • 多级队列调度算法:在一般的操作系统中使用的算法,将就绪队列划分成多个独立的队列,时间长的放到一个队列中,执行先到先处理算法,时间短的放到另个队列中,执行时间片轮转算法

  • 公平共享调度:控制用户对系统资源的调度,重要用户优先调度,不重要用户无法抢占资源。

2.进程同步互斥

1.0同步与互斥的区别

互斥体现的是排它性,同步体现的是协作性,互斥的抢占资源之间不知道对方的存在,也无法限制对临界区访问顺序,同步的资源之间知道对方的存在,可以控制对临界区访问顺序,如先生产再消费,同步中一般包含互斥,互斥是同步的一种实现方式,同一时间只能有一个线程或者进程访问临界区。

1.1

同步与互斥都是为了协调对共享资源的访问,同步可以通过信号量来实现,比如,多个线程同时更新一个变量,这是一种同步,在更新变量时需要加锁,每个线程都需要加锁,不能一个线程加了,一个线程没加,这又是一种同步;互斥是,同一时间只能有一个线程进入临界区,可以通过加锁来实现。

1.2同步、互斥、死锁、饥饿、临界区

  • 同步:协调对共享资源访问的方式

  • 互斥:一个进程占用资源,其他进程不能使用

  • 死锁:多个进程各占一部分资源,相互等待

  • 饥饿:几个进程轮流抢占资源,一个进程一直抢不到资源

  • 临界区:进程中访问临界资源,需要互斥执行的一段代码

1.3临界区访问规则:

(记忆技巧:一入三等待)

(另一种问法,临界区是如何解决冲突的?)

(同步机制遵循的原则是什么?)

  • 空闲进入:如果临界区空闲,则任何线程或者进程都可以进入

  • 忙则等待:如果一个线程进入了临界区,另一个线程发现临界区不是处于空闲状态,但是也进入了,就可能导致最终的结果不对,如相加到100,最后大于100。

  • 有限等待:等在进入临界区的线程或者进程不能无限期等待

  • 让权等待(可选):不能进入临界区的进程,应该释放CPU,如切换到阻塞状态

1.4.临界区的实现方法

1)更高阶的抽象方法(单处理器多处理器都可以):

  • 1.1锁

    • 优点

      • 支持单处理器多处理器,可以实现任意进程之间同步

      • 简单

      • 支持多个临界区

    • 缺点:

      • 忙则等待,浪费cpu资源,一个进程上锁之后其他进程只能处于等待状态

      • 可能导致饥饿,一个进程退出临界区,有多个进程同时等待进入,有一个进程却一直进不去。

      • 死锁:低优先级的进程占用临界区,高优先级的进程获得cup资源,想进入临界区却无法进入

  • 1.2.信号量

    是一个特殊的变量,本质是一个计数器,用来记录临界区资源的数量,它的作用是,协调进程对共享资源的访问,同一时间,临界区中只能有一个进程访问共享资源。

2)禁用中断:几乎不用,进入临界区,禁用所有中断,整个系统都会停下来,

适用单个处理器,如果多个处理器,也会修改进程中的变量

3)软件方法:复杂,两个线程之间需要共享全局变量

3.处理机与CPU

处理机=处理器(cpu)+主存储器+输入输出设备接口

处理机+外围设备=完整的计算机系统

4.数据块与扇区

1.1 数据块与扇区对应关系

操作系统每次从磁盘上读文件,都是以块为单位读数据。块的大小一般是1KB,2KB,4KB

1block = 8个连续扇区(sector) = 8 x 512 字节 = 4096B = 4KB

2.1为什么小文件更占内存?

因为每一个文件都会占用一个块,如果块大小是4KB,文件大小是4B,文件个数是10万,文件总的大小是400KB,但实际占了400MB大小;解决办法调整块的大小为1KB

3.1block与inode

操作系统进行磁盘分区时,会分成2个区域,一个是块区,一个是节点区。

超级块区(superblock):用来存放block和inode总量

block:存放文件数据

inode: 存放文件属性,block ID

每一个文件名字都有一个inode

4.1硬连接软连接

  • 硬连接:两个文件名字指向同一个inode, 使用同一个block,inode数量增加为2,一个文件删除,对另一个没有影响

  • 软连接:软连接文件存放源文件名字,与源文件是两个不同的inode, 源文件删除,软连接文件No such file or directory

5.常见的接口设备

1.1

字符设备:键盘,鼠标

块设备:磁盘驱动器

网络设备:以太网,无线网,蓝牙

I/O命令:send/receive网络报文

6.磁盘

1.1磁盘缓存

指磁盘扇区中的数据,加载到在内存中的缓存区

1.2磁盘结构

磁盘包括:磁头,磁道,扇区,柱面等

[图片上传失败...(image-2aedfa-1629025612426)]

7.文件系统

1.1什么是文件描述符

打开文件的标识

1.2虚拟文件系统

介于文件系统和用户空间之间,为用户空间提供统一的API,使得操作系统可以支持不同的文件系统

1.3文件的存储方式

顺序存储

链式存储:文件数据块通过链表连接

树形结构,索引分配:(Unix File System)

1.4如何存储大文件?

通过UFS多级索引分配的方式实现,一个Inode 中,不但存放数据块的ID(数据块指针),还存放数据块索引,索引可以分为1,2,3级。

[图片上传失败...(image-40a853-1629025612426)]

8.死锁

1.0什么是死锁?

是指相互等待资源的现象

1.1出现死锁必要条件

互斥:任何时刻只能有一个进程使用临界区资源

持有并等待:一个进程中至少有一个资源,并且在等待其他进程,占用的资源。

非抢占:进程在使用资源后,不主动释放

循环等待:存在等待环路,例如,进程P0等P1,P1等P2,P2等P0

只有上面4个条件同时满足才会出现死锁

1.2死锁处理方法

死锁预防

  • 死锁的必要条件不会同时满足

    • 把互斥的共享资源封装成可同时访问

    • 对资源排序,要求进程按顺序请求资源

    • 进程请求资源时,要求它不持有任何其他资源

    • 如进程请求不能立即分配的资源,则释放已占有资源

死锁避免

  • 在分配资源时确定不会出现死锁,判断进程需要的最大资源数小于当前系统可用的数,动态检测避免出现环形等待

死锁恢复和检测

  • 先让进程运行起来,当检测到死锁时再恢复,一次只终止一个进程直到死锁消除

9.进程通信

1.1进程间通信方式

  • 管道(pipe)

    是基于内存文件的通信机制,子进程继承父进程的文件描述符,缺省继承的父类文件描述符有0 stdin, 1 stdout, 2 stderr,传输数据有限。

    [图片上传失败...(image-d9fb31-1629025612426)]

  • 信号(Signal)

    信号是软件中断的通知和处理机制,可以直接用于内核进程和用户进程的通信。缺点是每一次发送的信号量有限,一般用于控制传输。

    正在运行的程序开启了一个进程,当按住ctrl+z时,进程收到一个停止信号,程序就停止运行了

    (信号量主要用于同一进程间,不同线程之间的通信)

  • 间接通信

    • 内部消息队列:操作系统维护一个消息队列,进程A通过系统调用send向消息队列中发送数据,进程B通过receive从消息队列中取出消息,进程A,B实现相互通信;一个消息队列可以关联过个进程,每对进程可以共享多个消息队列,优点是不需要实现进程间同步,由系统调用来实现,缺点是需要用户空间和内核空间的相互拷贝,传输数据不易过大。

    • 外部消息队列:

  • 直接通信

    • 通信进程之间创建共享链路,一对进程和链路之间是一对一的关系
  • 共享内存

    同一块物理内存映射到多个进程的内存地址空间,一个进程更新数据,另一个进程立即可见,不需要用户空间和内核空间相互拷贝的系统调度,速度最快。

    但是进程之间数据的同步,需要自己实现(通过信号量来实现)

    (每一个进程都有一个独立的内存地址空间,一个进程内的多个线程会共享内存地址空间)

  • socket

    可以实现不同主机之间进程的通信

10.轮询与中断

1.1 轮询与中断比较

轮询是cpu依次检查IO,看是否有准备就绪的IO,遍历的时间复杂度比价高,中断则是当某个IO设备准备好了,主动通知cpu,比如通过callback函数,不需要依次遍历,但是执行中断之前需要对之前进程的数据进行保存,需要额外的内存,对硬件要求比较高,也需要中断服务的支持。

2.1什么是软件中断和硬件中断?

中断是指程序正在运行时,收到了某个中断请求,系统会将正在运行的进程状态保存,优先处理中断请求执行中断服务程序,处理完成后,再回到刚才未处理的进程,或转入其他进程。

接入外部设备

11.内存

[图片上传失败...(image-72d64a-1629025612426)]

1.1逻辑地址和物理地址定义

  • 程序内部的地址,一个进程运行起来就会生成逻辑地址,内存或者外存上的地址是物理地址

  • 逻辑地址通过映射可以对应到物理地址

1.1.1逻辑地址是如何转换成物理地址的?

一个进程运行起来就会生成逻辑地址,然后存储管理单元将逻辑地址转换成物理地址,通过总线对应到内存

1.2操作系统中采用的内存管理方式

分段

分页

虚拟存储

垃圾回收

重定位

1.3什么是动态内存?

程序被加载执行时,分配连续内存的过程称为动态内存分配

1.4内存碎片如何产生的?

程序一次被加载执行,有的进程执行完了,两个进程之间空出一段区域,称为碎片,也叫外部碎片,在进程内部没有充分利用的区域称为内部碎片。

1.5内存碎片如何整理?

  • 将已经分配了内存的进程移动到一起,空出来的部分连在一起形成一个大块的连续内存。

  • 分区对换:将等待队列中的进程,移动到外存,腾出内存空间

2.1非连续内存

一个程序可以使用,非连续的物理地址空间

2.2非连续内存中块的大小如何定义的?

通过段式和页式存储管理定义

2.3什么是分段?

将进程中具有相同功能的部分放到一个段中,如果数据放一个段,代码放一个段,每一个段之间可以是不连续的。在虚拟地址空间中,一个段号和段内偏移确定一个段

2.4段表

段表实现虚拟地址和物理地址的映射,段表中存放段号和段长度。

2.5什么是分页?

页是一个一维结构只需要一个虚拟地址或者物理地址就能表示

页桢(桢):将物理地址划分成大小相同基本分配单位

页面(页):将逻辑地址划分成大小相同的基本分配单位

2.6页表

页表中有页表项,存放页号和桢号,表示页与桢的对应关系,实现逻辑地址和物理地址的映射

12.中断、异常、系统调用

1.1 三者比较

内核与外部通信的方式,中断,异常,系统调用,当有外部设备接入时会触发外部中断,当应用程序遇到缺页异常或者除0异常时,会触发异常服务例程,当用户使用系统提供的系统调用函数时会触发系统调用;中断是异步的,异常是同步的,系统调用是异步或者同步的;

[图片上传失败...(image-efd432-1629025612426)]

1.2系统调用与函数调用的比较

INT和IRET指令用于系统调用,为了保证内核安全有堆栈切换、特权指令转换

CALL和RET用于函数调用,没有堆栈切换

13.虚拟存储

1.1什么是虚拟存储?

当虚拟内存大于物理内存时,执行部分交换,将部分虚拟地址空间进行调入和调出,将不常用的数据从内存转到外存,。

1.2虚拟存储如何实现的?

通过虚拟页式存储和虚拟段式存储实现

1.3覆盖技术

将程序划分成功能独立的代码块,不会同时执行的代码块共享同一块内存

1.4交换技术

发生在进程之间,当一个进程处在等待队列中时,可以先将进程转到外存,

空出内存空间,以便优先级高的进程先使用

1.5局部性原理

在短时间内,程序执行的一些指令,以及这些指令操作的数据,局限在一定的区域范围内,局部性原理从理论上说明了虚拟存储技术时可以实现的。

14.进程与线程

1.1孤儿进程,僵尸进程,守护进程

孤儿进程:父进程退出,它的子进程还没有退出,子进程就变成了孤儿进程,孤儿进程由init进程统一管理。

僵尸进程:子进程退出,父进程没有调用wait,子进程的文件描述符还被占用着,子进程就成为了僵尸进程。

守护进程:在后台运行的进程

1.2孤儿进程,僵尸进程,带来的问题,处理办法?

孤儿进程,会由init进程统一管理,进行资源回收,所以不会带来什么问题;

僵尸进程,如果有大量僵尸进程存在,则会占用进程号,使得新创建的进程没办法完成,解决办法,找到创建将僵尸进程的父进程,kill掉,僵尸进程就会成为孤儿进程,被init进程回收收掉

1.3进程与线程的关系以及区别?

  • 关系:一个进程里面至少有一个线程,一个进程也可以开多个线程,多个线程共享进程的代码,数据,文件描述符等资源

  • 区别:进程是系统进行资源分配和调度的最小单元,线程是程序执行流的最小单元;进程有进程控制块,里面存放代码数据文件描述符等信息,线程有线程控制块,里面存放寄存器,堆栈,当前指令指针等信息。

1.4从资源分配和系统调度角度说明进程和线程

一段程序被加载到内存进形成了一个进程,进程的创建是通过系统调用函数fork,execv 完成的,当执行完execv系统调用时,当前进程有了独立的进程控制块,一个进程中至少有一个线程,线程也是通过相应的系统调用实现的,当进程执行完时,会执行exit()系统调用,并释放内存,文件描述符等资源,保留进程ID,进入僵尸进程,然后给父进程发送一个信号,父进程调用信号处理函数,在信号处理函数中调用wait()系统调用,完成对子进程的资源回收。

1.5什么是缓冲区溢出?

程序运行起来时会占用一部分内存,这部分内存可以存放数据,当接受到的数据量大时,会超过给程序分配的内存,会覆盖内存中其他部分的数据。解决办法:校验接受数据的长度

1.6.线程之间是如何进行同步的?

event事件通知

锁:线程之间通过串行的方式访问

信号量:可以同时准许多个线程访问共享资源,但是信号量限制了同时访问的线程数

1.进程、线程都各有什么特点?

2.进程之间如何进行交互?

3.线程之间如何进行交互?

全局变量加锁

信号

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 前言 北大《操作系统原理》[https://www.coursera.org/learn/os-pku]课堂笔记,...
    尤汐Yogy阅读 2,648评论 0 11
  • 操作系统期末预习笔记 whye 本课程教学采用的是32位操作系统 什么是操作系统 通用图灵机:操作+数据等于处理结...
    jun123123阅读 1,896评论 0 1
  • 体系结构基础 冯 诺伊曼 体系结构 计算机处理的数据和指令一律用二进制表示 顺序执行程序 计算机运行过程中,把要执...
    灏玮阅读 422评论 0 0
  • 根据https://www.jianshu.com/p/8935da4d0f8c 以及一些补充 第一章:概述 什么...
    一步一看阅读 1,651评论 0 0
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 5,249评论 1 22