操作系统
文章
4 内存管理
存储管理 目录 存储器的层次结构 程序的装载和链接 连续分配方式 分页存储管理方式 分段存储管理方式 虚拟存储器的基本概念 请求分页存储管理的方式 页面置换算法 请求分段存储管理的方式
4.1 层次结构与装入链接
1 存储器的层次结构存储器的层次结构 寄存器 寄存器访问速度最快,完全能与 CPU 协调工作。寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用作地址寄存器加快地址转换速度等。 高速缓存 Cache是介于CPU和主存储器间的高速小容量存储器,由静态存储芯片SRAM组成,容量较小但比主存DRAM技术更加昂贵而快速,接近于CPU的速度 CPU往往需要重复读取同样的数据库,Cache的引入与缓存容量的增大,可以大幅提升CPU内部读取数据的命中率,从而提高系统性能 分级:由于CPU芯片面积和成本,Cache很小。根据成本控制,划分L1,L2,L3三级。 L1 Cache:分为数据缓存和指令缓存;内置;成本最高,对CPU的性能影响最大;通常在32KB-256KB之间 L2 Cache:分内置和外置两种,后者性能低一些;通常在512KB-8MB之间 L3 Cache:多为外置,在游戏和服务器领域有效;但对很多应用来说,总线改善比设置L3更加有利于提升系统性能 主存储器 主存储器(简称内存或主存)是计算机系统中一个主要部件,用于保存进程运行时的程序和数据,也称可执行存储器。数据...
4.2 连续存储管理
4.2 连续分配方式存储管理 存储管理方式。内存的分配方式. 概念 每个进程占用一个物理上完全连续的存储空间(区域) 1 单一连续分配 只能用于单用户、单任务的操作系统中。 把内存分为系统区和用户区两部分.系统区仅提供给 OS 使用,通常是放在内存的低址部分;用户区是指除系统区以外的全部内存空间,提供给用户使用。 通常采用静态重定位的方式装入程序。 2 固定分区分配 这是将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。 3 动态分区分配 分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作这样三个问题。 数据结构: 空闲分区表。在系统中设置一张空闲分区表,用于记录每个空闲分区的情况。每个空闲分区占一个表目,表目中包括分区序号、分区始址及分区的大小等数据项。 空闲分区链。为了实现对空闲分区的分配和链接,在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针;在分区尾部则设置一后向指针,通过前、后向链接指针,可将所有的空闲分区链接成一个双向链, 分区分配...
4.3 分页存储管理
4.2 分页存储管理方式 参考文献 https://www.cnblogs.com/fkissx/p/4712959.html 1 页面与页表页面和物理块 将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,为各页加以编号。 把内存空间分成与页面相同大小的若干个存储块,称为 (物理)块或页框(frame) ,也同样为它们加以编号。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。 由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。 页面若太小,一方面虽然可使内存碎片减小,从而减少了内存碎片的总空间,有利于提高内存利用率,但另一方面也会使每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存;此外,还会降低页面换进换出的效率。然而,如果选择的页面较大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。 地址结构 前一部分为页号 P,后一部分为位移量 W(或称为页内地址)。 页表 系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页(0~n),依次在页表中...
4.4 分段存储管理
4.4 分段存储管理方式1 分段存储管理引入 虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。 下图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。 分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。 概念 每个程序可由若干段组成,每一段都可以从“0”开始编址,段内的地址是连续的 分段存储器的逻辑地址由两部分组成,段号、单元号 基本思想 段式存储管理基于可变分区存储管理实现,一个进程要占用多个分区 硬件需要增加一组用户可见的段地址寄存器(代码段、数据段、堆栈段、附加段),供地址转换使用 存储管理需要增加设置一个段表,每个段占用一个段表项,包括:段始址、段限长,以及存储保护、可移动、可扩充等标志位 2 分段管理基本原理分段地址结构 地址结构 段表 每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,应像分页系...
4.5 虚拟存储器
4.5 虚拟存储器的基本概念1 虚拟存储器引入 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 概念 没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。 程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去; 但如果程序所要访问的页(段)尚未调...
5 设备IO管理
设备管理 目录 IO系统 IO控制方式 缓冲管理 IO软件 设备分配 磁盘存储器管理 1.1 IO系统定义 IO设备。用于计算机系统与外部世界进行信息交换或存储。 IO操作。内存和IO设备之间的信息传送操作。不仅影响计算机的通用性和可扩充性,也是计算机系统综合处理能力及性价比的重要因素。 分类 按信息传输方向划分 输入设备:将外界信息输入计算机(键盘、鼠标、扫描仪等) 输出设备:将计算结果输出(显示器、打印机等) 输入输出设备:既可以输入信息,也可以输出信息(磁盘驱动器、网卡等) 按交互功能划分 人机交互设别:用于用户与计算机之间的交互通信(鼠标、键盘、显示器等) 存储设备:持久性存储大量信息并快速检索(磁盘驱动器、光盘驱动器等) 机机通信设备:用于计算机和计算机之间的通信(网卡、调制解调器等) 按设备管理划分 字符设备:以字符为单位进行信息交换,发送或接收一个字符流(鼠标、显示器等) 块设备:以固定大小的数据块(块是存储介质上联系信息组成的一个区域)进行信息交换(磁盘驱动器等) 网络设备:用于与远程设备通信的设备(网卡等,可以抽象为传送字符流的特殊字符设备,也可以...
5.1 Linux IO模型
五种IO模型 参考文献 Linux五种IO模型 linux实现IO过程的方法有很多。这里只对五种模型进行介绍。如果要实现五种IO过程,在linux系统编程部分进行学习。 0 I/O 模型背景介绍同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO,也包括其他设备的IO过程。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O...
5.2 Windows IO模型
UnixIO模型 WindowsIO模型
5.3 IO多路复用模型
actorhttps://zhuanlan.zhihu.com/p/372277468 演进过程 如果要让服务器服务多个客户端,那么最直接的方式就是为每一条连接创建线程。 创建一个「线程池」,将连接分配给线程,然后一个线程可以处理多个连接的业务。 这样又引来一个新的问题,单个线程怎样才能高效地处理多个连接的业务?当一个连接对应一个线程时,线程一般采用「read -> 业务处理 -> send」的处理流程,如果当前连接没有数据可读,那么线程会阻塞在 read 操作上( socket 默认情况是阻塞 I/O),不过这种阻塞方式并不影响其他线程。 就是将 socket 改成非阻塞,然后线程不断地轮询调用 read 操作来判断是否有数据,这种方式虽然该能够解决阻塞的问题,但是解决的方式比较粗暴,因为轮询是要消耗 CPU 的,而且随着一个 线程处理的连接越多,轮询的效率就会越低。 I/O 多路复用。I/O 多路复用技术会用一个系统调用函数来监听我们所有关心的连接,也就说可以在一个监控线程里面监控很多的连接。 我们熟悉的 select/po...














