操作系统习题总结

进程管理

1. 进程与线程的区别
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。
线程是进程的一个实体,是CPU调度和分配的基本单元,本身基本不拥有系统资源,只拥有一点在运行中必不可少的资源。
a 一个线程只能属于一个进程,一个进程可以拥有多个线程
b 属于一个进程的所有线程共享所有资源
c 线程控制模块比进程控制模块小的多,线程间切换代价小,进程间切换代价大
d 每个进程都有独立的内存空间,线程共享所属进程的内存空间

2 内核线程和用户线程的区别
内核线程建立和销毁都由操作系统负责,通过系统调用完成的。操作系统参考各进程内线程运行情况做出调度决定。
用户线程不依赖操作系统核心,利用线程库提供的函数来控制线程。
用户线程的优势在于:可以在不支持线程的操作系统中实现、线程管理(创建、销毁、切换)的代价比内核线程小的多,线程管理也比较灵活、线程利用的堆栈空间多
缺点是:同一进程只能有一个线程在运行,如果一个线程阻塞,整个进程都挂起
内核线程的优缺点和它相反。实际上,操作系统可以用混合的方式实现线程

3 线程同步有哪些机制
a 临界区:通过对多线程的串行化来访问公共资源,速度快,适合控制数据访问
b 互斥量:只有拥有互斥对象的线程才有权限去访问系统的公共资源,可以保证资源不会同时被多个线程访问
c 信号量:允许多个线程在同一时刻去访问同一个资源
d 事件: 通知线程一些事件已发生,启动后继任务的开始

内存管理

1 内存管理有哪几种方式
块式管理、页式管理、段式和段页式管理(最常用)
a 块式管理:
把主存分成一大块一大块的,当所需的程序片段不在主存时就分配一块主存空间,把程序片段load入主存,就算所需的程序片段只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但是易于管理。
b 页式管理:
把主存分成一页一页的,每一页的空间比一块一块的空间要小的多,显然这种方法的空间利用率比块式高得多。
c 段式管理:
把主存分成一段一段的,每一段的空间又要比一页一页的空间小很多。这种方式的空间利用率又比页式管理高很多。同时也有另一个缺点,一个程序片段可能会被分成几十段,这样很多时间就会被浪费在计算每一段的物理地址上。
d 段页式管理:
结合了段式管理和页式管理的优点。把内存分成若干段,每个段又分为若干页。段页式管理每取一次数据,要访问3次内存。

2 分段和分页的区别是
页是信息的物理单位,分页是为了提高内存的利用率,是由于系统管理的需要,页的大小固定且由系统确定。作业地址空间是一维的,程序员只需利用一个记忆符,即可表示一地址。
段是信息的逻辑单位,分段是为了更好的满足用户的需要。段的大小不固定,取决于用户所编写的程序。作业地址空间是二维的,标识一个地址时,程序员既要给出段名,又要给出段内地址。

3 什么是虚拟内存
是计算机系统内存管理的一种技术。相对于物理内存而言的,可以理解为“假的”内存。它使应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),允许程序员编写并运行比实际系统拥有的内存大得多的程序。虚存比实存有一下好处:
a 扩大地址空间。无论是段式页式或段页式虚存,寻址空间都比实存大。
b 内存保护。每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。虚存对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。
c 公平分配内存。每个进程都有同样大小的虚存空间。
d 当进程需要通信时,可采用虚存共享方式实现。
使用虚存也是需要代价的。表现在以下方面:
a 虚存的管理需要建立很多数据结构。这些数据结构要占用额外的内存。
b 页面的换入换出需要磁盘读写,很耗费时间的。
c 虚拟地址到物理地址的转换,增加了指令执行的时间。
d 如果一页只有一部分数据,会浪费内存。

4 什么事内存碎片?内碎片?外碎片?
内存碎片是由于多次进行内存分配造成的,当进行内存分配时,内存格式一般为:(用户使用段)(空白段)(用户使用段),当夹在中间的空白段很小不能提供给用户足够需要的空间,就会产生很多间隙造成效率的下降。
内碎片:分配给程序的存储空间没有用完,有一部分程序不使用,但其它程序也没法使用。内碎片是处于区域内部或页面内部的存储块,占有这些区域或页面的进程不使用这个存储块,同时系统也无法利用它直到进程释放或结束时。
外碎片:由于空间太小,小到无法给任何程序分配的存储空间。

5 虚拟地址、逻辑地址、线性地址、物理地址的区别
物理地址:CPU外部总线上的寻址物理内存的地址信号,是地址变换的最终结果
虚拟地址:由程序产生的由段选择符和段内偏移地址组成的地址。并没有直接访问物理内存,而是通过分段地址的变换处理后才会对应到相应的物理内存地址。
逻辑地址:程序产生的段内偏移地址。和虚拟地址没有明确的界限。
线性地址:虚拟内存到物理地址变换的中间层,是处理器可寻址的内存空间的地址。段基址加上程序代码的逻辑地址(段中的偏移地址),就产生了一个线性地址。如果分页机制,还要再变换产生物理地址。
虚拟地址到物理地址的转换与体系结构相关的,由内存管理单元负责(MMU).一般是分段和分页。逻辑地址->线性地址(没分页)->物理地址

6 cache替换算法有哪些
a 随机算法:随机数发生器产生要替换的块号,将该块替换出去。命中率较低。
b 先进先出(FIFO)算法: 将最先进入cache的信息块替换出去,命中率也不高
c 近期最少使用(LRU)算法: Least Recently Used 将近期最少使用的cache中的信息块替换出去,比fifo好一些。实现起来比较复杂,系统开销大。
d 最优替换方法(OPT)算法:使用此算法时必须先执行一次程序,统计cache的替换情况,有了这样的先验信息,第二次执行该程序时便可以用最有效的方式替换。命中率是最高的。理想化的算法,实际上把这种算法座位评价其它算法好坏的标准。
e 最少使用算法(LFU):选择近期最少访问的页面作为被替换的页面。是一种非常合理的算法,但实现起来非常困难。

用户编程接口

1 静态链接与动态链接的区别
静态链接:把要调用的函数或过程直接链接到exe文件中,该文件包含了运行所需的全部代码。缺点是当多个程序都调用相同函数时,内存会有这个函数的多个拷贝,浪费内存资源。
动态链接:所调用的函数代码没有拷贝到exe文件中,仅仅加入了一些所调用函数的描述(重定位)信息。
静态链接的执行程序可以在同类操作系统的机器上运行,动态连接则需要把dll文件拷贝过去。

2静态链接库与动态链接库的区别
静态链接库就是.lib文件,库中的代码要链接到可执行文件去,静态链接的可执行文件一般比较大一些。
动态链接库是一个包含可由多个程序同时使用的代码和数据的库。程序文件(.exe或.dll)在运行时加载这些模块。
相同点是实现了代码的共享。不同点是lib中的代码包含在exe文件中,该lib中不能再包含其它动态或静态链接库。而dll可以被exe动态的引用和卸载,可包含其它动态链接库或静态链接库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值