操作系统题目2

1.进程和线程的区别。

一个程序至少有一个进程,一个进程至少有一个线程

(1)进程是系统进行资源分配的基本单位,有独立的内存地址空间;线程是CPU调度的基本单位,没有单独的地址空间,有独立的栈,寄存器,程序计数器,局部变量等。

(2)创建进程的开销大,包括创建虚拟地址空间等需要大量的系统资源;创建线程开销小,基本上只有一个内核对象和一个堆栈。

(3)一个进程无法直接访问另一个进程的资源;同一进程内的多个线程共享进程的资源。

(4)进程切换开销大,线程切换开销小;进程间通信开销大,进程间通信开销小。

(5)线程属于进程,不能独立运行。每个进程至少有一个线程,成为主线程。

详细描述:

进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。

一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。

线程是进程的一个特定执行路径。当一个线程修改了进程中的资源, 它的兄弟线程可以立即看到这种变化。

生活中实例:

进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

一个车间里,可以有很多工人。他们协同完成一个任务。线程就好比车间里的工人。一个进程可以包括多个线程。

车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。

一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域

还有些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这好比某些内存区域,只能供给固定数目的线程使用。

这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。

不难看出,mutex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

2.死锁的必要条件,怎么处理死锁。

1 )互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2 )请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3 )不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4 )环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

解决死锁的方法:

(1)资源剥夺法:当发现死锁后,从其他进程那里剥夺足够数量的资源给死锁进程,以解除死锁状态。

(2)撤销进程法:就是撤销全部死锁进程,使系统恢复到正常状态,这种做法付出代价太大。

3.Window内存管理方式:段存储,页存储,段页存储(非连续分配管理方式)。

段存储:操作系统为了让内存能够使用起来,将程序分成多个段:如主程序,变量集,函数库,动态数组,栈,然后将每个用户段放到内存空闲的地方。会产生内存碎片。

页存储:将内存的存储空间分成与页大小相等的区域,称为物理块或块。物理内存的分配就是分页。针对每个段内存请求,系统一页一页的分配给这个段。这样的好处是空间浪费很小。(什么是页?就是用户作业的地址空间被划分成若干大小相等的区域)

段页存储:用户希望分段,物理内存希望分页,这样操作系统就把结合起来用。

这就存在一个虚拟内存的问题。首先在虚拟内存(地址空间)上割出一段给用户程序,但是虚拟内存并不能真正往里面放东西,需要把虚拟内存再映射到物理内存上。(该操作是对用户透明的)

4.进程的几种状态。

三种基本状态。就绪,执行,阻塞

(1)就绪状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机(CPU)便可立即执行。

(2)执行状态:当进程已经获得CPU,其程序正在处理机上执行,此时的进程状态就是执行状态。

(3)阻塞状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃CPU而处于阻塞状态。

5.IPC几种通信方式。IPC=Inter-Process Communication(进程间通信)

有三种通信方式。共享存储器系统,消息传递系统和管道通信系统

(1)共享存储器系统:在共享存储器系统中,进程通过共享内存中的存储区来实现通信。为了实现通信,进程在进行通信前应向系统申请建立一个共享存储区,并指定该共享存储区的关键字。

(2)消息传递系统:在消息传递系统中,进程间的数据交换以消息为单位,程序员直接利用系统提供的一组通信命令(原语)来实现通信。

(3)管道通信系统:管道是用于连接读进程和写进程以实现它们之间通信的共享文件,向管道提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道,而接收管道输出的接收进程(即读进程)可以从管道中接收数据。

6. 什么是虚拟内存。

实质就是让程序存在的地址空间和运行时用于存放程序的存储空间区分开。程序员可以在地址空间内编写程序,而不用完全考虑实际内存大小。在多道程序环境下,可以为每个用户程序建立一个虚拟存储器。

当然,虚拟存储器的容量也不是无限的,它的最大容量由计算机的地址结构来确定。

7. 虚拟地址、逻辑地址、线性地址、物理地址的区别。

  (1)虚拟地址是由程序产生的由段选择符和段内偏移地址组成的地址。这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换处理后才会对应到相应的物理内存地址。

  (2)逻辑地址指由程序产生的段内偏移地址。有时把逻辑地址当成虚拟地址,两者并没有明确的界限。逻辑地址在PCB中

  (3)线性地址是指虚拟地址到物理地址变换的中间层, 是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说段中的偏移地址,加上相应段基址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若是没有采用分页机制,那么线性地址就是物理地址。

  (4)物理地址是指现在 CPU 外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。(逻辑地址+基地址=物理地址)

  虚拟地址到物理地址的转换方法是体系结构相关的,一般分段与分页两种方式。以X86CPU为例:

  分段分页都是支持的。内存管理单元负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移 MMU(内存管理单元) 通过查询段表,可以把逻辑地址转换为线性地址。

  如果CPU没有开启分页功能,线性地址就是物理地址;如果CPU开启了分页功能,MMU还需要查询业表来将线性地址转换为物理地址;

  逻辑地址(段表)--------> 线性地址(页表)------------->物理地址。

  映射是一种多对一的关系,即不同的逻辑地址可以映射到同一个线性地址上;

  不同的线性地址也可以映射到同一个物理地址上。而且同一个线性地址在发生变化后,也可能被重新装载到另外一个物理地址上,所以这种多对一的关系也会随时间发生变化。

时间: 2024-09-29 00:56:43

操作系统题目2的相关文章

操作系统题目

1.内存管理中的 LRU 方法是用来管理什么的? 正确答案: A D   你的答案: A D (正确) 虚拟内存的分配 虚拟内存的释放 物理内存的分配 物理内存的释放 2.int main(){fork()||fork();}共创建几个进程:__3___ fork函数在父进程中返回新创建子进程的进程ID,大于0,此时父进程根据左值优先原则,不在与后面进行异或: fork函数在子进程中返回0,此时子进程仍然需要进行下一个fork函数

腾讯、阿里笔试面试体会

最近这个月参加阿里.腾讯2014实习生招聘,收获很多,得到了教训,吸收了经验,清楚了方向,现在就具体说说吧 1.阿里巴巴实习招聘:出于一颗打酱油的心情和几个小伙伴去投了简历,过了几天通知笔试,心里很虚,没什么准备,考试内容主要是网络有1题.数据结构.程序阅读题.Linux命令题.指针内存.操作系统题目,数据结构和程序阅读题很多,倒数第二题找出一个二分查找法的bug,考完出来心想肯定挂了,有些数据结构的题不会,如求取叶子节点的个数(忘记公式了),就在我以为挂定了时候,过了5天左右尽然通知我面试,有

C/C++ 笔试题

/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问

题目2:聊聊和我最相关的软件——操作系统

和我最相关的软件,当然是每天都要开启的Operating Systems(操作系统) 1)最早的操作系统出现在20世纪五六十年代,第二代计算机即晶体管计算机的时代.典型的操作系统是FMS(FORTRAN Monitor System).[来自<现代操作系统>] 由于通用的个人操作系统只有windows.linux等几种,选择的余地并不多.而windows操作系统由于图形界面交互友好,学习办公娱乐方便,使得我在最初只能选择它,而现在由于习惯,我很难再该用其它类型的操作系统.微软开发Windows

操作系统——请求调页存储管理方式的各种模拟

1.设计目的 通过对页面.页表.地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解. 2.设计内容 1)假设每个页面中可存放10条指令,分配给作业的内存块数为4. 2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存.在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令.如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存.如果4个内存块均已装入该作业,则需进行页面置

操作系统

接着上面所讲,操作系统的设计目标和一些基本要求是什么? 首先讲这个设计目标,设计目标,即是我要干什么,很清晰,我要把硬件抽象为用户提供一个接口,另外一方面,我得管理好不多的硬件资源,所以设计目标就是提供服务和管理资源! 第二方面,作为一个操作系统,它应该要满足哪些原则? 可移植性,这是十分重要的,让操作系统适应更多的平台,而这方面也提出了posix标准. 安全性和公正性,安全自然不用说,你必须让用户的数据不被别人偷走,也不能轻易的崩溃,公正性的话,对于每个进程,你都必须维护好公平,不能让一个进程

《Cracking the Coding Interview》——第16章:线程与锁——题目2

2014-04-27 19:14 题目:如何测量上下文切换的时间? 解法:首先,上下文切换是什么,一搜就知道.对于这么一个极短的时间,要测量的话,可以通过放大N倍的方法.比如:有A和B两件事,并且经常一起发生,每件只需要花几纳秒.如果你把A事件连续做几百万次,而B时间只做了几次,这样就能排除B事件对于测量的影响.如果总时间S = mA + nB.当m >> n 时,A≈S / m.下面的测量方法类似于打乒乓球,在主线程和副线程间互相传递一个令牌,这个令牌可以是变量.管道之类的用于通信的工具.与

《Cracking the Coding Interview》——第16章:线程与锁——题目1

2014-04-27 19:09 题目:线程和进程有什么区别? 解法:理论题,操作系统教材上应该有很详细的解释.我回忆了一下,写了如下几点. 代码: 1 // 16.1 What is the difference between process and thread? 2 Answer: 3 Process: 4 1. Basic element of resource allocation in the operating system. 5 2. Possesses independent

2017 校招网上笔试题目

2017 校招网上笔试题目 做了一下某大厂的笔试的题目 1. 一个表, visit(cookie_id, area1, area2, date) 给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长.一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有.反正蒙了一个.没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率. 2. 给了几个条件,判断你的名次.又是球赛的问题,考查你的推理能力. 3. en