现代操作系统笔记一

虚拟存储:
3.2地址空间:是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。
交换技术

3.3虚拟内存
为了解决程序大于内存的问题,通过将每个程序的地址空间分割成多个块(页面),映射到物理内存。
当程序引用到在物理内存中的地址空间时,MMU(内存管理单元)执行必要的映射。当程序引用到不在物理内存中的地址空间时,由操作系统负责将缺失的页面装入物理内存。
在多道程序设计系统中,一个程序等待它的一部分读入内存,cpu在被另一个进程使用。

虚拟地址被送去MMU转换成物理内存地址。程序核心映像的完整副本在磁盘上。
页表:页号+偏移量等。

地址空间是对物理内存的抽象。

加速分页过程:
每个进程都有自己的页表。页表很大,放在内存中的话每条指令都要更多地访问内存。引起性能降低一半。
由于大多数程序总是对少量的页面进行多次访问。于是通过在MMU或内存中设立TLB,将虚拟地址不必访问页表直接映射到物理地址。
软失效:当一个页面访问在内存中而不在TLB中时。
硬失效:页面本身不在内存中,也不在TLB中时。

使用多级页表(避免把全部页表保存在内存中)和倒排页表(实际内存中的每一个页框有一个表项)处理大内存的虚拟地址空间

页面置换算法

分段:
有两个或多个独立的地址空间可能比只有一个要好得多。
段的长度在运行期间可以动态改变。
段号+页号+段内地址

GDT和LDT:
GDT:全局描述符表,一个数组,每个元素存放一个段描述符
GDTR:寄存器GDTR用来存放GDT的入口地址
选择子:GDT的数组下标,对应一个段描述符
段描述符:基址+段长度+其他
选择子+偏移 唯一对应 线性地址

LDT与GDT类似的数据结构,存放于GDT中:LDT本身是一个段,而GDT不是。通过LDT可以搜寻程序的数据段等
LDTR记录局部描述符表的起始位置

文件系统:
文件是进程创建的信息逻辑单元。对磁盘建模。如果能把每个文件看成一种地址空间,那么就离理解文件的本质不远了。
文件
文件内容:无结构的字节序列。
目录是管理文件系统结构的系统文件。字符特殊文件用于串行IO类设备。块特殊文件用于磁盘类设备。
ASCII文件:指含有用标准ASCII字符集编码的字符的数据和文本文件。
二进制文件:具有一定的内部结构,文件头(魔数开始)、正文、数据、重定位位及符号表。
顺序存取和随机存取(以任何次序读取其中字节或记录)文件。

目录:目录也是文件

每个分区中都有一个独立的文件系统。磁盘的0号扇区称为主引导记录。MBR结尾是分区表。
超级块,包含了文件系统找那个的所有关键参数。
i节点,数据结构数组,每个文件一个,说明了文件的方方面面。

文件的实现
连续分配方案使磁盘变得零碎,链表分配不利于随机存取,
FAT,file allocation table,文件分配表。在内存中采用表的链表分配。缺点在于占用内存太大。
i节点,每个文件叫i节点的数据结构,列出文件属性和单文件的磁盘块所在地址。

目录的实现:将确定长度的块顺序排列,将不定长度的文件名放在堆中。

存储文件时的块大小:空间利用率和性能的权衡,一般设置为64KB

输入输出:
块设备可寻址,字符设备,不可寻址字符流
内存映射IO:将控制器的寄存器映射到IO中,方便驱动设备访问,但对设备控制寄存器进行缓存是灾难性的。
直接存储器存取 DMA:内存储器同外设之间进行高速数据传送时的硬件控制电路
中断:中断向量表。 陷阱。 异常。中断应答。上下文保存位置(内部寄存器,用户进程堆栈,内核堆栈)
软件产生的中断则不同,它是由专设的指令,如Intel X86的"INT n",在程序中有意地产生,所以是主动的,“同步"的。只要CPU一执行一条int指令,就知道在开始执行下一条指令之前一定要先进入中断服务程序,这种主动的中断我们称之为"陷阱”。
当时CPU的流水线和超标量技术使得中断更加复杂。

IO软件原理:IO对于CPU来说以三种不同的方式实现,程序控制IO,中断驱动IO,使用DMA的IO

IO软件层次:
中断处理程序、设备驱动程序
与设备无关的操作系统软件(设备驱动程序的操作系统接口,缓冲,错误报告,分配与释放专用设备,提供与设备无关的块大小)
用户级IO软件(有些IO软件的一部分存在于用户空间,比如IO格式化、假脱机等)

缓冲:缓冲区是用户程序使用IO的情况,而不是CPU使用的,CPU使用上述三种。
缓冲是为了减少中断和进程切换次数带来的开销,提升效率。

进程如果调用read,会从用户态切换到内核态,引起系统调用,阻塞进程自己。当字符到来时,引起中断,启动用户进程,用户进程处理字符,继续调用下一个read。
如果在用户空间维护一个缓冲区,由中断服务过程将字符塞满缓冲区后唤醒用户进程。但是由于缓冲区可能会因为分页被调出内存。
在内核空间中创建一个缓冲区。(内核的缓冲区有可能在内存有可能在硬盘上)。满后将缓冲区的内容复制到用户缓冲区。
双核缓冲:处理缓冲区在硬盘
循环缓冲区:由一个内存区域和两个指针组成。

输出时的缓冲:内核中一个缓冲区,用户一个,将用户缓冲区内容复制入内核,复制完成就解除用户进程阻塞,使用户进程继续活动,在内核中的缓冲区被消耗后。(问题:输出大量的包时缓冲区够用吗)
为了保证均匀的速度传输数据包,网卡中也有缓冲区,将数据在缓冲区之间进行复制会限制速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值