程序员的自我修养 摘录 1 操作系统做什么

操作系统的一个功能是提供抽象的接口给应用调用,另一个功能是管理硬件资源的分配使用.
对于个人计算机的资源,CPU的算力和内存空间的大小都是有限的,在这有限的资源下,如何挖掘它的最大潜力,是我们希望做到的.
接下来从CPU,存储器(包括内存和磁盘)和IO设备,我们分别从这三个方面来看看如何挖掘它们的潜力.
计算机发展早期,当某程序暂时等待IO无法使用CPU时,让另外的正在等待CPU的程序启动,使得CPU充分利用起来.这种被称为多道程序(Multi programming).但这对于有些响应时间要求高的程序来说是致命的.

经过改进,程序运行模式变成一种协作的模式,即每个程序运行一段时间以后主动让出CPU给其他程序,这种程序写作模式成为分时系统(Time Sharing System).WIndows的早期版本(95和NT之前),MAC OS X之前的Mac OS都是采用这种分时系统来调度程序的.

接下来就是我们现在熟悉的多任务(multi-tasking)系统了,操作系统接管了所有的硬件资源,并且本身运行在一个受硬件保护的级别.
所有的应用程序以进程的方式运行在比操作系统权限更低的级别,每个进程都有自己的独立的地址空间,使得进程之间的地址空间相互隔离.CPU由操作系统同意分配,每个进程按照优先级的高低都有机会得到CPU,但如果超过一段时间,操作系统就会暂停该进程,将CPU资源分配给其他等待运行的程序.这种CPU的分配机制叫做抢占式(Preemptive).

设备驱动

操作系统作为硬件的上层,它是对硬件的管理和抽象.对操作系统上的运行库和应用程序来说,它们希望看到的是一个统一的硬件访问模式.作为应用程序的开发者,我们不希望在开发程序的时候直接读写硬件端口,处理硬件中断等这些繁琐的事情.由于硬件之间千差万别,它们的操作方式和访问方式都有区别.比如我们想在显示器上画一条线,最好的方式是不管计算机用的什么显卡,什么显示器,多少分辨率,我们都可以调用一个lineto函数,具体实现交给操作系统来完成.在操作系统成熟之前,的确是应用程序的程序员要直接跟硬件打交道.
后来这些事情就交给操作系统中的硬件驱动程序完成了,驱动程序可以看成是操作系统的一部分,它跟操作系统内核一起运行在他特权级,但又与操作系统内核之间有一定的独立性,使得驱动程序又较好的灵活性.
因为PC和硬件多如牛毛,操作系统开发者不可能为每个硬件生产商提供一系列接口和框架,凡是按照这个接口和框架开发的驱动程序都可以在操作系统上使用.

进程的总体目标是希望每个进程从逻辑上来看都可以独占计算机资源.操作系统的多任务功能使得CPU能够在多个进程之间很好地被共享.
接下来是内存分配问题,早期程序是直接运行在物理内存上地,也就是说,程序在运行时所访问的地址都是物理地址.当然,如果一个计算机同时只运行一个程序,那么只有程序要求的内存空间不要超过物理内存的大小,就不会有问题.但事实上为了更有效地利用硬件资源,我们必须同时运行多个程序,正如前面说地多道程序,分时系统和多任务中一样,当我们能够同时运行多个程序时,CPU地利用率将会比较高,那么很明显地一个问题就是,如何将计算机上有限地物理内存分配给多个程序使用.
如果直接分配物理地址,会有问题

  • 地址空间不隔离
  • 内存使用效率低,内存不足,需要将某个程序整个换回硬盘上
  • 程序运行地地址不确定,对编写程序有影响

这里就用到前文提到的法宝,增加中间层,即使用一种间接的地址访问方法,把程序给出的地址看作是一种虚拟地址(Virtual Address) 然后通过某些映射的方法,将整个虚拟地址转换成实际的物理地址.这样,只有我们能够妥善控制这个虚拟地址到物理地址的映射过程,就可以保证任意一个程序所能访问的物理内存区域跟另外一个程序互相不重叠,以达到地址空间隔离的效果.
对于32位操作系统,可以映射2^32次方字节的内存地址,即4GB,那么可以映射4GB的物理空间.但你的计算机只装了512MB的内存,那么物理地址真正有效部分只有0x00000000-0x1FFFFFFF,其他部分都是无效的.(实际上还有一些外部IO设备映射到物理空间,也是有效的)
在这里插入图片描述
分段操作可以解决上面问题中的1和3
但是不能解决2
目前所有操作系统都使用4KB大小的页
虚拟内存页(VP,virtual page),把物理内存中的页叫做物理页(PP,Physical Page),把磁盘中的页叫做磁盘页(DP,Disk Page)
当获取的页不在内存中,就是页错误(Page Fault),然后操作系统会将这些页建立映射关系并装入内存.
MMU(memory management unit)来进行映射,一般都集成在CPU内部了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值