[关闭]
@lzb1096101803 2016-08-25T10:15:35.000000Z 字数 5734 阅读 424

操作系统相关

电话面试 操作系统


1、什么是进程(Process)和线程(Thread)?有何区别?
  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
  线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

2、线程同步的方式有哪些?
  进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
  
线程同步指多个线程同时访问某资源时,采用一系列的机制以保证同时最多只能一个线程访问该资源。线程同步是多线程中必须考虑和解决的问题,因为很可能发生多个线程同时访问(主要是写操作)同一资源,如果不进行线程同步,很可能会引起数据混乱,造成线程死锁等问题;

临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)

临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问
互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会同时被多个线程访问。串行化一样
信号量:它允许多个线程同一时刻访问同一资源,但是需要限制同一时刻访问此资源的最大线程数目。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,PV操作。像池
事件(信号):通过通知操作的方式来保持多线程的同步,还可以方便的实现多线程的优先级比较的操作

总结比较: 

4、 进程的几种状态

不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样的。包括一下三种:
运行态:进程占用CPU,并在CPU上运行;
就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
阻塞态:进程因等待某件事发生而暂时不能运行;

运行---》就绪:这是有调度引起的,主要是进程占用CPU的时间过长
就绪---》运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行---》阻塞:发生了I/O请求或等待某件事的发生
阻塞---》就绪:进程所等待的事件发生,就进入就绪队列

初始状态,就绪状态,执行状态,等待状态和终止状态

Linux系统的进程通常有以下几种状态:

R(TASK_RUNNING),可执行状态。
只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于可执行状态。
S(TASK_INTERRUPTIBLE),可中断的睡眠状态。---阻塞
处于这个状态的进程因为等待某事件的发生(比如等待socket连接、等待信号量),而被挂起。当这些事件发生时,对应的等待队列中的一个或多个进程将被唤醒。一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态。
D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的是进程不响应异步信号,无法用kill命令关闭处于TASK_UNINTERRUPTIBLE状态的进程。
T(TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态。
向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态(除非该进程本身处于TASK_UNINTERRUPTIBLE状态而不响应信号)。当进程正在被跟踪时,它处于TASK_TRACED状态。
Z(TASK_DEAD - EXIT_ZOMBIE),退出状态。
进程在退出的过程中,处于TASK_DEAD状态,如果它的父进程没有收到SIGCHLD信号,故未调用wait(如wait4、waitid)处理函数等待子进程结束,又没有显式忽略该信号,它就一直保持EXIT_ZOMBIE状态。只要父进程不退出,这个EXIT_ZOMBIE状态的子进程就一直存在。
X(TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁。
EXIT_DEAD状态是非常短暂的,几乎不可能通过ps命令捕捉到。

5、进程挂起 阻塞 睡眠的区别

阻塞是进程在等待某种资源,但是不能马上得到,,必须等待别的进程释放资源才能继续,属于被动无法得到时间片,内核就切换其它进程运行
睡眠一般为主动式的放弃一段CPU时间

阻塞是由于进程所需资源得不到满足,并会最终导致进程被挂起

进程挂起的原因并不一定是由于阻塞,也有可能是时间片得不到满足,挂起状态是进程从内存调度到外存中的一种状态,若在就绪态时,从内存调出到外存中,就是就绪挂起态,若在阻塞态时,从内存调出到外存中,就转换成了阻塞挂起态

6、 IPC(Inter-Process Communication,进程间通信)方式?

7、 虚拟内存。

虚拟存储器的定义和特征
基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

虚拟存储器的大小由计算机的地址结构决定,

釆用连续分配方式时,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此,虚拟内存的实需要建立在离散分配的内存管理方式的基础上。
虚拟内存的实现有以下三种方式:
• 请求分页存储管理。
• 请求分段存储管理。
• 请求段页式存储管理。

不管哪种方式,都需要有一定的硬件支持。一般需要的支持有以下几个方面: • 一定容量的内存和外存。
• 页表机制(或段表机制),作为主要的数据结构。
• 中断机构,当用户程序要访问的部分尚未调入内存,则产生中断。
• 地址变换机构,逻辑地址到物理地址的变换。

常见的置换算法有以下四种。
1. 最佳置换算法(OPT)
2. 先进先出(FIFO)页面置换算法
3. 最近最久未使用(LRU)置换算法
4. 时钟(CLOCK)置换算法

http://www.94cto.com/index/Article/content/id/738.html
http://c.biancheng.net/cpp/html/2613.html

8、操作系统内存分页管理
在操作系统引入分页和分段管理之前,操作系统采用的是分区管理,就是将内存分成多个连续的地址空间,如果允许将一个进程分散到许多不连续的空间,就可以避免内存紧缩,减少碎片

分页其实就是将物理内在分为多个大小相同的页框,然后每个进程根据映射表可以映射到物理地址中的任意一个页框中,而分段是从程序代码的角度出发,将程序地址分为若干个段,然后根据映射表映射到相应的内存。

操作系统还要在进程切换时,正确地切换两个不同的进程地址空间到物理内存空间的映射。这就要求操作系统要记录每个进程页表的相关信息
进程页表:完成逻辑页号(本进程的地址空间)到物理页面号(实际内存空间,也叫块号)的映射。

页式管理方式的优点是:
1)没有外碎片,每个内碎片不超过页大比前面所讨论的几种管理方式的最大进步是,
2)一个程序不必连续存放。
3)便于改变程序占用空间的大小(主要指随着程序运行,动态生成的数据增多,所要求的地址空间相应增长)。
缺点是:要求程序全部装入内存,没有足够的内存,程序就不能执行。

http://blog.sina.com.cn/s/blog_a46817ff0101hjzp.html

9、段式存储管理
在为某个段分配物理内存时,可以采用首先适配法、下次适配法、最佳适配法等方法
在回收某个段所占用的空间时,要注意将收回的空间与其相邻的空间合并。

程序通过分段划分为多个模块,如代码段、数据段、共享段:
这样做的优点是:可以分别编写和编译源程序的一个文件,并且可以针对不同类型的段采取不同的保护,也可以按段为单位来进行共享。

总的来说,段式存储管理的优点是:没有内碎片,外碎片可以通过内存紧缩来消除;便于实现内存共享。缺点与页式存储管理的缺点相同,进程必须全部装入内存。

10、页式和段式管理的区别
页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:
1)、需求:是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。
一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
2)、大小:页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
3)、逻辑地址表示:页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
4)、比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

分页和分段的主要区别
段是信息的逻辑单位,用户可见,长度可变
页是信息的物理单位,用户透明,长度固定
段式:若干独立的逻辑空间构成进程的非连续逻辑空间,二维地址空间
页式:一维地址空间
段式:物理空间不连续,但段内连续
页式:物理空间不连续

http://blog.csdn.net/cjl5678/article/details/8948799

下面这个说的好
http://blog.csdn.net/wang379275614/article/details/13765599

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注