虚拟技术-时分复用、空分复用、进程状态切换、程序生成过程、进程同步、虚拟内存

发布时间 2023-12-26 16:48:51作者: 廿陆

虚拟技术把一个物理实体转换为多个逻辑实体。

主要有两种虚拟技术:时(时间)分复用技术     空(空间)分复用技术

  多进程与多线程:多个进程能在同一个处理器上并发执行使用了  时分复用技术,每个进程轮流占用处理器,每次只执行一小个时间片并快速切换

  虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。

进程状态切换:

  ? 就绪状态(ready):等待被调度

  ? 运行状态(running)

  ? 阻塞状态(waiting):等待资源

  ? 只有就绪态和运行态可以相互转换,其他都是单向转换。就绪状态的进程通过调度算法获得 CPU 时间,转为运行态;

    而运行状态的进程,在分配给的CPU时间片用完之后转为就绪态,等待下一次调度。

  ? 阻塞状态是缺少需要的资源而从运行状态转换而来,但是该资源不包括 CPU 时间片,缺少CPU时间片会从运行态转换为就绪态。

一个C/C++程序从开始编译到生成可执行文件的完整过程:

  (1)预编译:处理源代码预编译指令、替换宏定义、删除注释

  (2)编译:将预编译之后生成的 xxx.i  或  xxx.ii 文件,进行一系列词法分析、语法分析、语义分析及优化后,生成相应的汇编代码文件

  (3)汇编:将汇编代码转变为机器码文件。由汇编器as完成。

  (4)链接:将不同的源文件产生的目标文件进行链接,从而形成一个可执行的程序。分为静态链接和动态链接。

    ? 静态链接(小程序、不常更改适用):函数和数据被编译进一个二进制文件。将静态库函数和数据复制进执行程序中(浪费空间、更新困难:代码修改需要重新编译链接、运行快)

    ? 动态链接(大程序、常更改适用):程序拆分为相对独立的部分,运行时链接在一起形成一个完整的程序。(更新方便、性能低:每次执行都需要链接)

进程同步的四种方法:

  1.临界区:对临界资源进行访问的 一段代码称为临界区。

  为了互斥访问临界资源(同一时刻仅允许一个进程适用),每个进程进入临界区之前,需要先检查。

  2.同步与互斥:

    ? 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系

    ? 互斥:多个进程在同一时刻只有一个进程能进入临界区。

  3.信号量:是一个整型变量,可以执行 down 和 up 操作,亦为常见的 P、V操作

    ? 如果信号量的取值只能为 0  或者  1,那么就成了  互斥量(Mutex),0表示临界区已加锁,1表示临界区解锁。

  4.管程:同一时刻只能有一个进程使用管程,进程无法继续执行的时候不能一直占用管程。

操作系统对内存管理的操作:

  ? 操作系统负责  内存空间的分配与回收

  ? 操作系统提供  某种技术从逻辑上对内存空间进行扩充

  ? 操作系统提供  地址转换功能,负责程序逻辑地址与物理地址的转换

  ? 操作系统提供  内存保护功能,保证各进程在各自内存空间内运行,互相独立。

虚拟内存的作用:为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。(逻辑上32KB物理内存可以执行64KB大小的程序)