作业

来源:互联网 发布:mac qq 讨论组 改昵称 编辑:程序博客网 时间:2024/05/24 04:58


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

 

答:Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”。

“数据段”:已被初始化的变量,包括全局变量和已被初始化的静态变量;未初始化数据段,存储未被初始化的静态变量,又称BBS

“代码段”存放的是程序代码的数据;

“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。

 

2、如何查看进程的信息(线程数):

三种方法:

(1) 使用top命令,具体用法是top -H

          加上这个选项,top的每一行就不是显示一个进程,而是一个线程。

2) 使用ps命令,具体用法是ps -xH

       这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。

3) 使用ps命令,具体用法是ps -mq PID ubuntu下貌似不能使用)

       这样可以看到指定的进程产生的线程数目。

 

 

3、进程间通信方式有哪些?以及在什么情况下用什么通信方式?

(1)管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

 

(2)有名管道(named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

 

(3)信号量( semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段

 

(4)消息队列( message queue ): 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

 

(5)信号( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生

 

(6)共享内存( shared memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信

 

(7)套接字( socket ): 套解口也是一种进程间通信机制,与其他通信机制不同的是,我们熟知的WWW服务、FTP服务、TELNET服务 等都是基于套接口编程来实现的。除了在异地的计算机进程间以外,套接口同样适用于本地同一台计算机内部的进程间通信。

 

4、进程同步的几种方法?

Linux下,进程同步的解决方式主要有四种:

(1)信号量

(2)文件锁

(3)无锁CAS

(4)校验方式(CRC32校验)

 

 

5、进程死锁产生的原因及四个必要条件和解决预防

v 产生死锁的原因主要是:

1) 因为系统资源不足。

2) 进程运行推进的顺序不合适。

3) 资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则

就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

v 产生死锁的四个必要条件:

1 互斥条件:一个资源每次只能被一个进程使用。

2 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

4 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

v 死锁的解除与预防:

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和

解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确

定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态

的情况下占用资源。因此,对资源的分配要给予合理的规划。

 

6、什么是守护进程,什么是僵尸进程?

答:

1.守护进程:

指在后台运行的,没有控制终端与之相连的进程。它独立于控制终端,通常周期性地执行某种任务。Linux的大多数服务器都是使用守护进程的方式实现。

 

2.僵尸进程:

当子进程先于父进程终止,而父进程又没有调用wait函数等待子进程结束,子进程进入僵死状态,并且会一直保持下去除非系统重启.子进程处于僵死状态,内核只保存该进程的一些必要信息以备父进程所需.此时子进程始终占用着资源,同时也减少了系统可以创建的最大进程数;如果子进程先于父进程终止,且父进程调用了waitwaitpid函数,则父进程会等待子进程结束

 

 

 

7、解释一下进程同步和进程互斥的区别?

进程之间的相互作用关系分为两种,一种是共享资源的关系,一种是相互合作的关系,前者属于进程互斥、后者属于进程同步。

进程互斥:进程间的间接作用关系。两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域。比较典型的问题是打印机的共享访问。

进程同步:进程间的直接作用关系。在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。比较典型的问题有生产消费者问题、哲学家进餐问题等。

 

8、进程与线程之间有何区别?

答:1.进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;而线程是进程的一个执行流,CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

2.进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。所以,一个进程崩溃后,在保护模式下不会对其它进程产生影响;而线程只是一个进程中的不同执行路径。

3.线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮

4.但在进程切换时,耗费资源较大,其效率比不上线程高

9、线程同步有哪些方法?

答:进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,通过下面这些技术的使用,可以解决线程之间对资源的竞争,以到达线程同步的目的:

        1互斥量Mutex

        2信号灯Semaphore

        3条件变量Conditions

 

10、父子进程终止顺序到底会造成什么样的影响?

v 父进程在子进程之前终止

对于父进程已经终止的所有进程,它们的父进程都改变为init进程。我们称这些进程由init进程收养。其操作过程大致是:在一个进程终止时,内核逐个检查所有活动的进程,以判断它是否是要终止进程的子进程,如果是,则该进程父进程ID就更改为1init进程的ID)。

 

v 子进程在父进程之前终止

如果子进程在父进程之前终止时,内核为每个终止的子进程保存了一定量的信息,所以当终止进程的父进程调用waitwaitpid时,可以得到这些信息。内核可以释放终止进程所使用的所有存储区,关闭其所有打开文件,但至少会保存包括进程ID、该进程的终止状态以及该进程使用的CPU时间总量等信息。

一个已经终止、但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息、释放它仍占用的资源)的进程被称为僵死进程。

原创粉丝点击