操作系统学习(一)(B站视频)

操作系统启动和操作系统的三种接口

1. OS如何启动的?

2. OS的三个interface,分别通过什么实现的?

3. 中断、系统调用和异常分别是什么意思?

4. OS 的三种接口有何区别?

5. 具体事件是如何产生的呢?

2019.4.18

6. 程序如何进行system call呢?

7. 什么叫用户态,什么叫内核态?

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

9. 以上三种接口跨越了操作系统,具有什么额外的开销?

操作系统概论

10. Cpu的五个组成部分?

11. 并发与并行的区别?

12. 关于操作系统与软件的关系?

13. OS具有的四个特征?

14. 什么是RAM和ROM ?

15. 操作系统的演变历程。

16. unix操作系统属于哪类操作系统?

2019.5.18
17. 软件的内核态和用户态的权限有什么区别?

程序的执行过程

18. 一个C程序经过了哪些步骤才能被执行?

2019.5.22
19. 编译与汇编操作的区别?

20. 汇编器的作用?

CPU

21. CPU由哪几个部分组成,MMU有何用?

22. CPU的寄存器有哪些?

OS对内存方面的管理

分段
23. 操作系统进行内存合并和分配的几种算法?

24. 编译过程对于地址空间转变的帮助,操作系统干了什么工作?

25. 什么是分段?分段和分页属于硬件的层面还是软件层面?

分页

26. 分段与分页在内存大小上的区别?

2019.5.24

27. 页与框中,每一页的大小与每一框的大小相同,但总页数和框数,也就是页号数和页框数不同,页号数大于页框数,因为逻辑地址空间大于物理地址空间。

28. 页表由谁来维护?页表有什么作用?

29. 帧与页的区别?

30. 页表本质上是什么数据结构?一个操作系统只有一个页表吗?

31. 页表是由一条条的页表项组成的,页表项包含了哪些内容?

32. 什么是TLB,TLB有什么用?

33. 什么是覆盖技术?

34. 为了让大程序跑在内存有限的计算机上,可以采取哪些办法?

35. 在写程序的时候,要注意考虑到程序的局部性原理,题目中的两种写法有什么区别?
在这里插入图片描述
36. 多级页表有什么用?

37. 在页表项中,有几个特殊的标志符,方便对页表项的操作,具体有哪几个?

答案

1.
电源开启后,BIOS进行自检(对电脑进行初始化检查),由BIOS(Basic I/O System)调用bootLoader来把操作系统从disk 调用到内存当中。
BootLoader是用来加载OS的, 一般放在硬盘的第一个主引导扇区。

2.
interface就是接口,三个接口

  • 与外设的接口,通过中断和I/O实现的。   interruption
  • 与程序的接口1———系统调用 System Call
  • 与程序的接口2———异常   Exception

3.
这是三种OS的接口:
中断是OS与外设的接口,也就是于OS与所有外设的连接方式。
系统调用正常的程序与OS的对接接口,为了保证安全性,应用程序不能随便动用资源,要统一用向OS发出请求的方式来进行,也就是系统调用。
异常异常的程序或其他异常状态与OS的对接接口,是异常错误向OS发出请求的方式。
中断是外设的事件
异常是内部Cpu的事件

4.
(1)源头不同
一个是外设
一个是应用程序
一个是异常错误
(2) 时间类型
处理时间类型有两种:同步和异步
同步和异步取决于,是不是没有任何预期,随时可能发生的。
Interruption: 异步,因为不知道何时外设会给出指令,比如按键盘
Exception: 同步,因为必须走到一定的程序,才会随之报错
System Call: 同步或异步,比如发消息。然后一直等着回来的消息,是同步,如果发消息之后去干别的了,有消息回来了再去处理的话,就是异步。
(3)响应
响应方式不同:
中断是透明的,OS基本不管
System Call的响应是:持续或等待
Exception的响应是:杀死程序,或重新执行一次指令。

5.
事件分为内部事件和外部事件,即异常和中断,
异常和中断的产生分为硬件和软件两个层面:
不同的外设会对应不同的编号,这里计算机会有一个表

首先中断和异常里面硬件做的工作都是一样的:

  • 设置中断标记:将外部事件设置为中断标记,产生一个中断事件的ID(中断号)

中断后软件做的工作,也就是OS所做的工作:

  • 保存被打断的程序的状态:保存现场
  • 中断服务程序处理
  • 根据中断号给的地址,跳到那里去执行,完成相关的情况,并清除中断标记。
  • 完成上述情况后,恢复之前的程序异常状态。

异常时 OS做的工作:

  • 保存现场
  • 杀死异常程序(即退出程序)或者重新运行异常指令(服务不到位,修补好异常后程序执行)
  • 恢复现场

6. 程序并不能直接进行System Call,这样会很危险,所以所有操作系统都定义了程序调用system call的接口:
Windows系统定义了:Win32 API
Unix、LINUX和macOS X的所有版本定义了:POSIX API
JAVA 虚拟机(JVM)定义了JAVA API。

当程序通过接口调用system call的时候,会实现从用户态向内核态的转变,使得控制权从应用程序转向了操作系统,

7. 用户态和内核态是指的应用程序在CPU中的特权的一种状态,当处于内核态时,才有权利去控制整个计算机系统,

8. 有两点:
(1)所处空间不同:当应用程序进行函数调用时,实在同一个栈空间内进行的。
而在系统调用的时候:操作系统(内核)与应用程序各含有一个堆栈。
(2)开销不同:系统调用的开销更大,因为涉及到了一个内核态跟用户态的转化,还有系统调用涉及到了堆栈的转换,所以前者开销更大。

9.

  • 时间开销:比直接的程序调用(比如函数调用)更大。
  • 存储开销:中断和异常的时候,需要建立中断号/异常号/系统调用号(表明什么设备产生了中断,那里产生了异常,哪里调用system call),还有其号与地址间对应的表。
  • 操作系统有一个独特的内核,需要建立单独的堆栈。
  • 验证参数(安全上的开销):os不信任应用程序,需要对其进行参数检查。
  • 内核态到用户态的内存拷贝等额外开销

10.

  • 寄存器
  • 计数器
  • 控制器
  • MMU
  • 缓存

11. 并发是一种感觉,是宏观的,并行是指微观和宏观的,也就是说单核处理器里面多进程可以并发,但是不可以并行。
并行指同一时刻同时发生,同一时刻单个处理器只能运行一个进程,并发是指同一时间段同时发生。
在这里插入图片描述

12.
在这里插入图片描述
操作系统分为三个部分

  • 命令行,命令行接口
  • GUI,图形接口
  • 内核Kernel,操作系统的内部

内核范围如下,实际上内核就是操作系统的核心功能:在这里插入图片描述

13.

  • 并发:计算器可以同时存在多个运行的程序(注意不是同时运行多个程序)
  • 共享:应用宏观上要感觉同时在访问资源,微观上实际上是互斥访问。
  • 虚拟 :通过多道程序设计,让用户感觉到整个计算机为他一个人服务
  • 异步 :程序是走走停停的,并不是一帆风顺的。向前走的速度是不可知的,但只要输入一致,结果都是相同的。

14. 无语,学了这么久这俩都不知道:
RAM: random access memory 就是主存
ROM:Read-only memory 只读内存,由于硬盘是外存,所以Rom和硬盘不等价,
查的资料:

电脑中的ROM是在主板上的电池旁边的一块写着BIOS的芯片。ROM只读内存,它固化了指令和数据在芯片里,断电后数据不会消失。
Ram你就大概理解为内存条就成,Rom现在好像不用了,计算机启动的BOIS芯片貌似就是用的Rom

15.
操作系统的演变

  • 单用户系统
  • 批处理系统:丢给操作系统一批作业,让它自己去完成,批处理系统不具有交互性。
  • 多道程序系统:多道程序在计算机中穿插运行,微观上是串行的,宏观上是并发的。
  • 分时系统:还是多人共享一个电脑
  • 个人计算机:一个用户一个系统
  • 分布式系统:一个用户多个系统:具有安全性和高可靠性

16.
分时操作系统。

17.
CPU处于内核态时可以执行任何一条指令,可以完全控制整个计算机,在用户态时 CPU 无法执行一些特殊的机器指令,也无法访问IO

18.
首先是编译过程,会把程序转换为汇编语言,但是汇编语言仍然不是机器语言,再经过汇编过程,转换为机器语言,然后一个大文件往往由很多个小文件组成,需要把他们用link操作连接起来,这样就能生成一个exe文件,位于硬盘上,最后要使用exe的时候,会通过一个loader将该文件载入内存,通过程序重定位,最终运行程序。
总结如下:
编译————汇编————链接————载入(程序重定位)

19.
编译是将语言变为,汇编语言,汇编语言是一种介于编程语言与机器语言的中间语言,机器语言是010101的二进制编码,而编程语言则是完全面向用户使用的语言。

20.
把汇编语言转换为机器语言。

21.
寄存器,计数器,缓存和MMU。(忘了还有一个控制器)
MMU,内存管理单元:用于将程序给的逻辑地址转换为实际的物理地址。如果MMU找不到,会到内存中的map里面去找。

22. 基址寄存器和界限寄存器,用来设置逻辑地址空间的相关信息,一个记录空间的起始位置,一个记录逻辑地址空间的长度。

23.
最基本的有三种:
首次适配算法:从0地址开始找,直到找到满足条件的区间
优点:简单,快 缺点:碎片多
最优适配算法:什么是最适合?也就是区间差值是最少的
优点:减少大块的内存被分割的情况,比较简单
缺点:重分配慢,仍然有碎片,容易产生很多微小的碎片
最差适配算法:选取最大的块,进行拆分分配。
优点:适合全是中等尺寸块的分配,分配很快(提前建立了一个块体积排列表)
缺点:重分配慢,仍然有外部碎片,后面很可能有无法分配出大块的内存空间。

24.
编译能够让程序中的逻辑地址空间转换为实际内存中的物理地址空间,操作系统是记载下了这个映射过程。

25.
分段是将一个程序分为堆、栈等部分,分别进行储存,而分页是将物理内存进行小规模的划分,属于硬件层面。在这里插入图片描述

26.
分段中每段的大小是不固定的,而分页中每页的大小是固定的。

28.
由操作系统维护页表,可以通过页号找到对应的帧号。

29.

  • 总空间大小不同,一般页的总空间较大。
  • 不是所有的页都能对应页框。
  • 页是连续的逻辑上的地址空间,而页框是物理内存上不连续的。

30.
页表其实就是一个大数组,每一个运行的程序都有一个动态变化的页表
具体过程如下:
在这里插入图片描述
PTBR是页表的基址寄存器。

具体转换过程如下:
在这里插入图片描述

31.
在这里插入图片描述

resident bit:用于表示当前帧是否存在,若不存在则为0。

32.
TLB:Translation Lookaside Buffer,旁路转换缓冲,即页表缓冲,又称快表缓冲。
TLB的作用:由于“页表”存储在主存储器中,查询页表所付出的代价很大,防止对内存中的页表进行二次访问(一次是寻找帧号,第二次是使用数据)。
TLB就是一块缓存,它利用了程序局部性原理,把CPU附近访问的页表项放在缓存里。
如果TLB命中,可以很快获得目标的帧地址,否则的话,到CPU中寻找页表项,把它加载到TLB中。

33.
如图,由于B和C,D、E和F不能同时存在于内存中,所以最大内存取流程的最大内存即可,对于原来的程序可以直接进行覆盖。
在这里插入图片描述
还有其他的覆盖方式,只要分区的程序不可能再流程上同时执行,就可以进行分区覆盖:
在这里插入图片描述

34.
目前有以下技术:

  • 覆盖
  • 交换
  • 虚存

可以使用覆盖和交换技术,二者的区别如下:
在这里插入图片描述
覆盖操作是程序内部进行的,它往往需要耗费程序员的代码工作;
交换操作的操作对象是进程,要把整个进程的空间进行换入和换出,加大了处理器的开销。
更好的办法:虚存。
虚存实际上是覆盖操作和交换操作的升级与结合,因为它是基于分页操作的。
在这里插入图片描述

35.
int在32位里面是4个字节,1024*4正好是4K,程序里面默认地址顺序是先行后列的。在这里插入图片描述

36.
多级页表,说白了,就是利用时间去换取空间。
第一,多级页表通过分级的方法,用链表的方式将所有页表项连接起来

  • 原来的一级页表需要连续空间,而多级页表可以使用非连续空间。

第二,多级页表是把原来的页表拆分成了多段,只看第一段,就可以得知,页表项的resident bit是否为1,如果为0,说明没有对应的物理空间,也就没有其物理地址,所以也就没有其二级页表项等后续数据。

  • 多级列表,可以resident bit为0的页表项,从而节省内存空间。

第三,缺点:

  • 检索的次数增加,所耗时间变大。

37.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/alexhu2010q/article/details/89361713