文章目录

  • 操作系统
    • 准备
    • 系统调用
    • 计算机体系结构及内存分层体系
      • 地址空间 & 地址空间是如何生成的
      • MMU
      • 连续内存分配
        • 内存碎片问题
        • 分区的动态分配
        • 压缩式碎片整理
        • 交换时碎片整理
      • **非连续内存分配**
        • **分段**
        • **分页**
        • **帧**
        • **页**
        • **页寻址机制**
        • TLB
        • 二级页表
        • **多级页表**
        • 反向页表
    • 虚拟内存
    • 进程
      • 进程的定义
      • 进程的组成
      • 进程控制块(Process Control Block)
      • 进程的生命周期
      • 进程挂起
    • 线程
      • 线程与进程的比较
    • 上下文切换context
    • 调度
    • 文件系统

因为是听课时候记得笔记,所以可能会比较混乱,可以当作了解操作系统来看

操作系统


学习目标:什么是操作系统?

准备

  • 系统启动及中断
  • 物理内存管理
  • 虚拟内存管理
  • 内核线程管理
  • 用户进程管理
  • CPU调度
  • 同步与互斥
  • 文件系统

预备知识:

  • 计算机结构原理
  • 数据结构
  • C和汇编语言

前言

  • 用户角度:操作系统是一个控制软件,用来控制和限制用户的使用

  • 管理应用程序:

    1. 为应用程序提供服务
    2. 杀死应用程序
  • 资源管理:
    管理外设、分配资源

  • Linux.Windows.Android的界面
    属于外壳(Shell),而不是内核(Kernel),Kernel是我们研究重点,在Shell之下

计算机最重要的三部分:
CPU、内存、硬盘

Kernel-操作系统系统(uCore)内部组件,包括:

  • CPU调度器
  • 物理内存管理
  • 虚拟内存管理 - 提供上层更大的更安全的一块空间环境
  • 文件系统管理 - 抽象出来以文件形式存储保存数据
  • 中断处理与设备驱动

OS Kernel的特征:

四个:并发、共享、虚拟、异步

  • 并发:计算机系统中一段时间内,存在多个运行的程序运行,需要OS管理和调度;
    并行:计算机系统中在一个时间点上,存在多个程序同时运行(需要有多核CPU才能完成)
  • 共享:同时访问,互斥共享
  • 虚拟:把CPU虚拟为进程,把硬盘虚拟为文件系统。利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
  • 异步:程序执行不是一贯到底,而是走走停停,向前推进的速度是不可预知。但只要运行环境相同,OS需要保证程序的运行结果也要相同

CODEING
计算机调度方式:分时调度(schedule时间片轮询,中断帮助完成分时调度)

  • 微内核:模块化,消息之间不是以函数方式通信,而是通过消息松耦合的架构通信。
    优点:服务与服务之间模块化,更安全(file system,device driver, network stack, i/o system)
    缺点:数据通信的代价高,服务与服务之间通信要先传给内核,再有内核转发到服务,需要多次拷贝空间,性能差。

计算机组成:CPU,内存,IO外设

操作系统启动过程:
X86:

  • BIOS
    加电自检,检测一些外设,将Bootloader从硬盘第一个扇区(512byte)加载到0x7c00,跳转到CS:IP = 0000:7c00)
  • Bootloader
    1.将操作系统的代码和数据从硬盘加载到内存中
    2.跳转到操作系统的起始位置

系统调用

应用程序主动向操作系统发出服务请求(应用请求)

异常:

  • 非法指令或者其他坏的处理状态(内存出错)

中断:

  • 来自不同的硬件设备的计时器和网络的中断(来源与外设)

1. 处理时间

  • 中断:异步
  • 异常:同步
  • 系统调用:异步或同步(如果操作程序发出请求后阻塞等待—同步;如果程序发出系统调用请求(同步),后去做别的事情,等系统返回结果再去通知程序—异步)

2. 响应

  • 中断:持续,对用户应用是透明的
  • 异常:杀死或者重新执行意想不到的的应用程序指令
  • 系统调用:等待和持续

中断:

  • 保存当前处理状态
  • 中断服务程序处理
  • 清除中断标记
  • 恢复之前保存的处理状态

异常:

  • 保存现场
  • 异常处理:杀死产生异常的程序,重新执行异常指令
  • 恢复现场

系统调用

标准C库的例子:

  • 应用程序调用printf()时,会触发系统调用write()
  • 常见的read、write、ioctl

程序访问主要是通过高层次的API接口而不是直接进行系统调用

win32 API 用于windows(可以直接系统调用)

POSIX API 用于POSIX-based systems(包括UNIX\LINUX\MacOS X的系统)是一套通用可移植的API,只要遵循这个标准都可以执行(可以直接产生系统调用)

JAVA API用于JAVA 虚拟机(JVM)(不能直接残生系统调用,需要再去调用win32/posix)

学习目标:
操作系统是如何完成系统调用的?

  • 通常情况

用户态:应用程序的特权比较低,不能直接发送机器指令和直接访问设备IO

内核态:操作系统运行中,操作系统可以执行任何一条指令,包括机器指令,访问设备IO

函数调用和系统调用的区别?

  • 函数调用:实际上是在一个栈空间中的调用和返回

  • 系统调用:应用程序和操作系统都拥有各自的堆栈,当应用程序发出系统调用的时候,它需要从用户态的堆栈空间切换到内核态的堆栈空间,同时还需要特权级别的转换(用户->内核);堆栈切换和特权转换都需要一定的开销,也就意味着系统调用的会比函数调用的开销大很多,但这样做目的也为了更加安全和可靠。

知识小结:

跨越操作系统边界的开销

在执行时间上的开销超过程序调用

开销:

1 建立中断/异常/系统调用好与对应服务例程映射关系的初始化开销

2 建立内核堆栈

3 验证参数

4 内核态映射到用户态的地址空间更新页面映射权限

5 内核态独立地址空间TLB


计算机体系结构及内存分层体系

计算机体系结构主要分为三大块:

CPU:程序和软件上的控制

内存: 主要放置程序的代码和数据

外设:满足一些功能,把数据保存在硬盘中…

内存分层体系组成:

CPU所访问的数据和指令所存放的位置在哪里?

CPU内部:寄存器->cache

资源很有限

CPU外部:主存->物理硬盘

速度稍慢,但是硬盘可以掉电保存数据,等再启动时CPU读入到内存

在操作系统中管理内存的不同方法:

  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

内存的实现高度依赖于硬件

  • 必须知道内存架构
  • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

地址空间 & 地址空间是如何生成的

  • 地址空间定义
  • 地址空间生成
  • 地址安全检查

物理地址:硬件真实的地址

逻辑地址(虚拟地址):一个运行程序所拥有的内存地址

过程: .c -> .s -> .o -> xxx

* 预处理:gcc -E xxx.i xxx.c
* 编译:gcc -S xxx.S xxx.i
* 汇编:gcc -c xxx.o xxx.S
* 链接:gcc -o xxx.elf xxx.o

生成编译->汇编->链接(编译器 符号地址空间)

运行:加载硬盘中的程序,放到内存中运行(CPU中loader,逻辑地址空间)

MMU

CPU中有一个MMU,MMU有一块区域表示了这个映射关系,正如上图中蓝色区域的地址转换过程。

当CPU要执行某一条指令时候,它的ALU固件需要这条指令的内容,他会发出这个这个请求,这个请求中带有逻辑地址,CPU中的MMU会去查询这个逻辑地址在对应的表中有没有对应的物理地址,如果有这个物理地址,那么就可以找到。

连续内存分配

内存碎片问题

  • 分区的动态分配

    第一适配

    最佳适配

    最差适配

  • 压缩式碎片整理

  • 交换时碎片整理

碎片问题

分区的动态分配

第一适配

优势:

  • 简单

  • 易于产生更大空闲块,向着地址空间的结尾

劣势:

  • 外部碎片

  • 不确定性

压缩式碎片整理

把内存中分布不连续的地址空间,重新排序使得连续,从而减少内存碎片。但是会系统的内存拷贝开销会非常大

交换时碎片整理

换入换出(swap)充分利用硬盘部分,p3在运行时,不够p4在内存中等待所需的空间,把p4一部分移到硬盘中(暂时把没有执行的程序放入硬盘中,等需要执行时再放入内存)

非连续内存分配

连续内存分配的缺点:

分配给一个程序的物理内存时连续的

内存利用率较低

有外碎片、内碎片的问题

非连续内存分配的优点:

一个程序的物理地址空间是非连续的

更好的内存利用和管理

允许共享代码与数据(共享库等…)

支持动态加载和动态链接

非连续内存分配的缺点:

如何建立虚拟地址和物理地址之间的转换

软件方案

硬件方案:

分段:

程序的分段地址

分段寻址方案

分页

分段





通过段号(index)就可以找到对应到段表里面的真实项,就知道了这个项中在物理地址的限制,CPU会判断一下 一个限制是否是一个非法的操作,如果不合法的地址,会产生一个异常,kill这个进程;如果合法就会取出这个物理地址进一步处理。

问题:段表谁来建立?—>操作系统

分页

  • 划分物理内存至固定大小的帧(大小是2的幂,eg:512,4096,8192)

  • 划分逻辑地址空间至相同大小的页(大小是2的幂,eg:512,4096,8192)

  • 建立方案 转换逻辑地址为物理地址(pages to frames)

    • 页表
    • MMU/TLB

在物理地址使用帧

在逻辑地址上使用页

  • 一个程序的逻辑地址空间被划分为大小相等的页

    • 页内偏移大小 = 帧内偏移大小
    • 页号大小 <> 帧号大小

页寻址机制

流程分析:

CPU先获取逻辑地址,逻辑地址中记录了两部分:offset偏移量(o)和pages页号

§,页号当做index索引,然后根据页号(page number)在页表基址(page base address)上的偏移, 找到页表(page table)中找到对应的帧号,然后根据帧号(frame number)和offset偏移量(o)找到实际的物理地址。

页表(page table)是谁建立的?

page table 是操作系统建立的,这样才能让程序完成映射关系,才能正常的跑

  • 页表

    • 页表概括
    • 转换后备缓冲区(TLB)
    • 二级/多级 页表
    • 反向页表

地址转换实例

解释
第一个逻辑地址(4,0)代表在页表中的第5个(01234,都是用0开始计数),flags的resident bit(是否对应物理地址的存在位)为图中标红部分(0->没有对应的帧块,物理地址不存在。1->有对应的帧块,物理地址存在)。

第二个逻辑地址(3,1023),同理即可,对应的页帧号为00100 -> 4,再根据后面的偏移量找到对应的物理地址(4,1023)。

64位计算机->寻址空间为2^64

一个页的大小 -> 1024byte -> 2^10

一个页表会多大? -> 2^64 / 2^10

  • 页表性能问题:(空间、时间)

    每个应用程序都会有一个页表,会导致栈的空间很大,浪费资源,CPU的cache放不下,需要把页表放到内存中,开销很大

  • 如何解决?

    • 缓存(caching)
    • 间接访问(Indirection)访问

    TLB

  • 什么是TLB?:

    把我们经常访问的页表项放到TLB中,因为虽然TLB(CPU中)访问很快,但是大小是很有限的,如果TLB中有记录页表项被访问到(TLB命中),可以不经过页表,直接访问物理地址。如果TLB中没有记录页表项被访问到(TLB未命中),CPU会去访问页表,再去访问物理地址。

  • 那会不会经常出现TLB未命中?

    不会的,因为在32位系统中TLB有4K个项,可以被访问4K次。

  • 延伸扩展:

    在我们编程时候,尽量把变量和存储放到一个位置,减小TLB的开销

二级页表

  • 二级页表产生原因?

    由于上节说到页表占用的空间太大,那如何使得页表占用的空间尽量小,引入二级页表。

  • 寻址流程:

    CPU是知道一级页表的起始地址的,然后根据p1的number作为index查到一级页表中的page table项,一级页表中存的这个值是二级页表的起始位置(如图箭头所示),然后根据p2的number作为Index(一级页表的address+p2Number)查到二级页表的帧号(frame number),再用帧号加上对应的offset偏移量得到相应的物理地址。页的offset与帧的offset是一样的

  • 优点:

    省空间 -> 如果p1中查不到对应的p2映射,那么就不用保留p2在内存中

多级页表

明白了二级页表进一步也推出多级页表

  • 优点

    省空间,时间换取空间 比如我们的64位操作系统可以用5级页表表示,随着页表的增多开销随之越来越大

反向页表

这里不赘述了,想学习的小伙伴自己学一下

虚拟内存

  • 如果在计算机系统中,尤其是在多道程序运行的环境下,可能会出现内存吃紧问题,怎么办?

    • 如果是程序太大,超过内存容量,可以采用手动覆盖(overlay)技术,只把需要的指令和数据保存在内存中
    • 如果是程序太多,可以采用自动的交换(swpping)技术,把暂时不能执行的程序送到外存中
    • 如果想在有限容量的内存中,以更小的页颗粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术

进程

  • 进程的描述

    • 进程的定义
    • 进程的组成
    • 进程的特点
    • 进程控制结构

进程的定义

由静态的程序,加载到内存中,成为动态的进程

进程的组成

一个进程应该包含:

程序的代码
程序处理的数据
程序计数器中的值,指示下一条将运行的指令
一组通用的寄存器的当前值,堆、栈
一组系统资源(如打开的文件)

  • 程序与进程的区别?

    • 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行,进程有核心态/用户态

      • 为什么进程有核心态和用户态的区分?

        一个进程不止在用户态上操作,比如需要读写硬盘这些外设,都需要由操作系统去完成

    • 进程是暂时的,程序是永久的:进程是一个变化的过程,程序是可以永久保存

    • 进程与程序的组成不同,进程的组成包含:程序、数据、进程控制块(即进程状态信息)

进程运行不是一直执行的,会被优先级更高的进程打断,然后再进行执行

  • 进程的特点:

    • 动态性:可动态的创建,结束进程
    • 并发性:进程可以被独立调度并占用处理机运行;并发并行(多核)
    • 独立性:不同进程的工作不相互影响(页表来保证)
    • 制约性:因访问共享数据/资源或进程间同步而产生制约

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfNQrvL2-1660920031852)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209125839929.png)]

  • a:动态
  • b:独立
  • c:调度切换

进程控制块(Process Control Block)

这部分挺有用的




进程的生命周期

  • 进程生命期管理

    • 进程创建 -> 初始化
    • 进程运行 -> 执行
    • 进程等待 -> 等待
    • 进程唤醒 -> 就绪
    • 进程结束 -> 消亡

进程创建

引起进程创建的3个主要过程:

系统初始化

用户请求创建一个新进程

正在运行的进程执行了创建进程的系统

进程等待

进程唤醒

进程结束

  • 为什么会从running变为ready?

    因为系统的内存资源和CPU的处理是有限的,当有多个程序在运行时,如果一个程序在规定的时间片内没有完成,就会被切换为下一个进程去执行,也就是从running变为ready。

  • 可能的状态变化如下:

    NULL->New:一个新进程被产生出来执行一个程序

    New->Ready:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态。是否会持续很久->不会,因为OS创建pcb是很快的

    Ready->Running:处于就绪状态的进程被进程调度程序选中后,就分配到处理机上来运行。

    Running->Exit:当进程便是它已经完成或者因出错,当前运行进程会有操作系统作结束处理

    Running->Ready:处于运行状态在其运行过程中,由于分配给它的处理机时间片用完而让出处理机谁完成?->操作系统

    Running->Blocked:当进程请求某样东西且等待时

    Blocked->Running:当进程要等待某事件到来时,它从阻塞状态到就绪状态

进程挂起

实质:把进程暂时放到外存中

挂起状态

  • 阻塞挂起状态(Blocked-suspend):进程在外存并等待某事件的出现
  • 就绪挂起状态(Ready-suspend):进程在外存,但只要进入内存,即可运行

线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MIOrDwlj-1660920031857)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209135112740.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i4uSXYbb-1660920031857)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209135301624.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBFOLIyy-1660920031857)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209135706333.png)]

  • 程序分析:

    • 单进程: 播放声音可能不连贯,因为是单进程,read是阻塞读取,可能比较慢,而play比较快,当play完成后,read读耗费时间,导致卡顿
    • 多进程: 如果使用多进程的话,
      • 1.存在一个cpu调度,内存占用(维护进程的系统开销较大;创建进程时,分配资源,建立PCB;撤销进程时,回收资源,撤销PCB;进程切换时,保存当前进程的状态信息)
      • 2.IPC(进程间通信复杂)的问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDm8hqiH-1660920031858)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209141341809.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbQxKfYn-1660920031858)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209141653807.png)]

系统资源分配的最小单位,系统调度的最小单位?

如何理解这句话:

进程主要就是负责资源的管理(打开文件,访问网络…)

线程成为了进程组成的重要部分,一个进程中的所有线程共享该进程的所有资源

一个线程组成:code(代码段),Initialized data(数据段),stack(堆栈)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7lJ0RifA-1660920031858)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209142213138.png)]

如何理解线程的缺点:

​ 线程能够共享一个进程的所有资源,若某个线程由于意外破坏了某个资源,其他线程访问这个资源也会出错.如果一个线程崩溃了,所有线程都会崩溃,进程也会挂掉.

什么时候用线程什么时候用进程?

强调性能使用线程,强调安全性使用进程

eg:你浏览器创建的所有网页都是线程,如果一个线程崩溃了,会导致所有网页不能打开,浏览器都崩溃了,这样的设计就不好!!!!!!!! ---> chrome都是使用进程模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LWBbMsz-1660920031858)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209143200417.png)]

线程与进程的比较

  • 进程时资源分配单位,线程是CPU调度单位

    资源:内存,文件,网络…

    cpu调度单位:一些控制流所需要的信息

  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源

  • 线程同样具有就绪,阻塞和执行三种基本状态,同样具有状态之间的转换关系

  • 线程能减少并发执行的时间和空间开销

    1 线程的创建时间比进程短

    因为进程要创建内存去管理,创建文件去管理

    ​ 线程直接使用进程已经创建好的内存和文件

    2 线程的终止时间比进程短

    同上同理

    3 同一进程内的线程切换时间比进程短

    因为同一个进程中的线程拥有相同的页表,所以切换快

    切换进程时它们的页表都是不同的

    4 由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核通信

    同一个线程它们使用的地址是相同的,直接访问地址即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlrM1f2k-1660920031859)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145105828.png)]

  • 用户线程:CPU的调度单位为进程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aV0RHi6g-1660920031859)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145250601.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPW6HhpY-1660920031859)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145353390.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwrDq0rA-1660920031859)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145628846.png)]

  • 内核线程:CPU调度单位为线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M4HATWru-1660920031860)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145802784.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEdONlJU-1660920031860)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209145839329.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5iKAdGS-1660920031860)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209150106717.png)]

上下文切换context

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPkdGiI5-1660920031861)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209150334203.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elNecVkS-1660920031861)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209150453952.png)]

什么时上下文切换?

process P0运行时要上下文切换,它要把进程寄存器信息保存在PCB中,把另一个进程process p1寄存器信息的PCB恢复CPU中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmxt4Fzk-1660920031862)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209150722211.png)]

进程的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBMFWjsC-1660920031862)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151001342.png)]

exec会把另外一个程序覆盖之前的进程代码段,PCB时不变的,如果执行了why would I execute证明exec执行失败

  • 执行fork

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Im1IiSS7-1660920031862)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151513125.png)]

​ |

​ |

  • 执行exec

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DOqjOuB-1660920031863)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151623736.png)]

  • 执行fork

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jrz7Unte-1660920031863)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151704753.png)]

  • 执行exec

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sHxg9QAV-1660920031864)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151823996.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJnU10aN-1660920031864)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209151849806.png)]

  • 这是很方便去执行一个新的进程

  • fork优化

    因为fork会拷贝父进程的资源,开销大,你要执行exec是不需要之前父进程的资源,所以拷贝过程是多余的 使用vfork:不会复制所有的资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtD8pN7U-1660920031865)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209152001586.png)]

现在系统基本都是COW


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLkaI261-1660920031865)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211209154050685.png)]

调度

  • 上下文切换

    • 切换CPU的当前任务,从一个进程/线程到另一个

      • 保存当前进程/线程在PCB/TCP中的执行上下文

        • 读取下一个进程/线程的上下文
  • CPU调度

    • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
    • 调度程序:挑选进程/线程的内核函数(通过一些调度)
    • 什么时候进行调度?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g81CdttI-1660920031866)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211215211452357.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YUmBuMIW-1660920031866)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211215211622392.png)]

文件系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oufOa0z6-1660920031866)(C:\Users\11639\AppData\Roaming\Typora\typora-user-images\image-20211215213740242.png)]

虚拟文件系统:/proc…

清华教授的操作系统-----课程笔记相关推荐

  1. 北交 操作系统 课程笔记(一)

    北交 操作系统 课程笔记(一) 根据王垠的博文,关于微内核的对话,可将 Linux 看作 C 语言的运行时系统.也有很多对这个观点的批评,让人分不清对错.让我们借着课程再思考一次吧! 文章目录 北交 ...

  2. 吴立德教授深度学习课程笔记

    复旦大学 吴立德教授 深度学习(Deep Learning)课程(http://www.youku.com/playlist_show/id_21508721.html),老先生讲得很细致,非常推荐. ...

  3. 清华大学 - 操作系统 课程笔记

    目录 第零讲 在线教学环境准备 step 1 step 2 step 3 第一讲 操作系统概述 1.1 课程概述 1.2 教学安排 1.3 什么是操作系统 1.4 为什么学习操作系统 1.5 操作系统 ...

  4. 西电李航 操作系统课程笔记 day11 IO softwarelayer

    文章目录 Principles of IO software IO软件目标 设备独立性(device independence) 统一命名(uniform naming) 错误处理(error han ...

  5. 西电李航 操作系统课程笔记 day8 Implementation of File system

    文章目录 File system Implementation 文件系统(file system) 布局 普通文件(file) 分配(allocation) 连续存储 指针存储 追踪(tracking ...

  6. 西电李航 操作系统课程笔记 day10 IO hardware principles

    文章目录 Principles of IO hardware IO设备 块设备(block device) 字符设备(character device) 设备控制器(device controller ...

  7. 操作系统——bilibili王道考研操作系统课程笔记

    第一章:操作系统概述 1.操作系统的概念(定义).功能和目标. 知识总览 计算机系统的层次结构:逻辑(纯硬件)->操作系统->应用程序->用户. 操作系统: 1.负责管理协调硬件.软 ...

  8. 大学操作系统课程笔记

    第一章 操作系统引论 1.什么是操作系统? 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他 ...

  9. 李宏毅教授Imitation Learning课程笔记总结

    Imitation Learning 又称demonstration/apprenticeship learning 用于解决没有reward的情况下的学习情况 多数情况下agent可以和环境进行互动 ...

最新文章

  1. box-shadow属性
  2. BAT常爱问的面试智力题,你能答对几道?
  3. Oracle获取LOB长度的两种方法效率对比
  4. java 执行linux命令行_10个高效Linux技巧及Vim命令对比
  5. Eclipse Neon 配置C/C++开发环境
  6. ORA-32004 参数设置过时的解决办法
  7. AngularJS学习笔记(1)——MVC模式的清单列表效果
  8. jquery框架分析-构造jquery对象初步
  9. 打开计算机管理iis,iis管理器怎么打开?Win7打开iis管理器的操作方法
  10. java 设置excel颜色_Java 设置Excel图表背景填充(颜色、图片填充)
  11. 怎样设定计算机屏幕锁定时间,电脑怎么调锁屏时间
  12. F# 图形数学基础。
  13. index ffs、index fs原理考究
  14. 计算机网络系统的维护,简论事业单位计算机网络管理系统的维护
  15. Fortify扫描漏洞解决方案
  16. conda创建环境报错conda.core.subdir_data.Response304ContentUnchanged
  17. 有趣的路灯问题——按规律打印图形
  18. 升级AndroidStuido 4.2后 Gradle Tasks 不见了?
  19. 9款日志管理工具大比拼,选型必备!
  20. LOTO课5:三极管音频放大电路实践

热门文章

  1. Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾
  2. .ps格式的文件怎么打开?方法:通过GSview打开或将.ps转换成.pdf
  3. 九九乘法表c语言编程10乘10,C语言编程九九乘法表
  4. Type mismatch: inferred type is MainActivity but FlutterEngine was expected
  5. 毕业两年,只会Crud,侥幸通过面试定级 P6,没想到我也可以入职阿里!(面经分享)
  6. 【luogu P4218】珠宝商(SAM)(点分治)(根号分治)
  7. html 标题设置链接 博客,从今天开始,拿起VuePress打造属于自己的专属博客
  8. 3D结构光摄像头深度算法
  9. odroid xu4安装ROS melodic+远程登录+Roboware 开发
  10. 买阿里云服务器多少钱,不同预算可购买的配置及价格汇总