操作系统基础训练十问十答

来源:互联网 发布:淘宝网集市消保卖家 编辑:程序博客网 时间:2024/06/02 04:26

Q:简述Linux进程内存空间分为哪几个段?作用分别是什么?

A:Linux中的进程内存空间分为“数据段”、“代码段”和“堆栈段”三段
“数据段”存放的是全局变量、常数以及动态数据分配的数据空间“代码段”存放的是程序代码的数据“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。
Q:如何查看进程的信息(线程数):
A:ps-elf,想知道具体的进程可以采用 ps -elf | grepid为所需要查询的进程
Q:进程间通信方式有哪些?以及在什么情况下用什么通信方式?优缺点:
A:进程间通信方式有管道、信号量、信号、消息队列、共享内存、套接字六种。
1)管道分为有名管道和无名管道,其中无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,一般用于两个不同进程之间的通信。有名管道也是一种半双工的通信方式,但它允许无亲缘关系进程间的通信。
2)信号量是一个计数器,可以用来控制多个线程对共享资源的访问,它不是用于交换大批数据,而用于多线程之间的同步。他常作为一种锁机制。因此,主要作为进程间以及同一个进程内不同线程之间的同步手段。
3)信号是一种比较复杂的通信方式,用于通知接收进程某个时间已经发生。
4)消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点。
5)共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。他往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信。
6)套接字可用于不同进程间的进程通信。

Q:进程同步的几种方法?
A:临界区、互斥区、信号量种方式。
Q:进程死锁产生的原因及四个必要条件?
A:产生死锁的原因主要是:(1) 因为系统资源不足2) 进程运行推进的顺序不合适3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
Q:什么是守护进程,什么是僵尸进程?
A:僵尸进程:一个进程结束了,但是他的父进程没有回收那么他将变成一个僵尸进程守护进程:子进程未结束,父进程结束,子进程由init 进程接管,子进程可作为守护进程。
Q:解释一下进程同步和进程互斥的区别?
A:相互合作的两个进程之间需要在某个(些)确定点协调它们的工作,一个进程到达了该点后,除非另一进程已经完成了某些操作,否则就不得不停下来,等待这些操作的完成。这就是进程间的同步。
两个进程由于不能同时使用同一临界资源,只能在一个进程使用完了,另一进程才能使用,这种现象称为进程间的互斥。①同步的主要特征是:一个进程在某一点上等待另一进程提供信息,两进程之间存在直接制约关系,其表现形式为进程—进程。②互斥的主要特征是争用资源,两进程间存在间接制约关系,其表现形式是进程—资源—进程。
Q:进程与线程之间有何区别?
A:一个程序就是一个进程,而一个程序中的多个任务则被称为线程。进程是表示资源分配的基本单位,又是调度运行的基本单位。线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。 进程和线程的关系:1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量3)处理机分给线程,即真正在处理机上运行的是线程4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
Q:线程同步有哪些方法?

A:1.互斥锁(mutex)
初始化锁;静态分配;动态分配
加锁,对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁,调用完毕之后需要销毁锁。
2.条件变量(cond)
初始化条件变量静态态初始化动态初始化
等待条件成立,释放锁,同时阻塞等待条件变量为真才行激活条件变量;清除条件变量。
3.信号量(sem)
信号量初始化等待信号量释放信号量销毁信号量。
Q:当父进程在子进程之前终止会发生什么?
A:如果父进程退出而它的一个或多个子进程还在运行,那么这些子进程就会变成称为孤儿进程。孤儿进程最终将被init进程(1号进程)所收养,并由init进程完成对它们的状态收集工作。