操作系统基础知识

1. 什么是进程,什么是线程

进程是并发执行程序在执行过程中资源分配和管理的基本单位
线程是程序执行的最小单位

2.进程和线程的区别

一个进程可以拥有多个线程,线程属于某个进程,同一进程的线程共享该进程的地址空间和资源,进程之间的地址空间和资源是相互独立的。每个进程都是一个可执行的应用程序,有一个执行入口,但是线程不能单独执行,必须存在于进程中。线程执行开销小,但不利于资源的管理与保护。
进程的执行开销大,但可以进行资源的管理与保护。进程可以跨机器迁移。

  1. 地址空间: 同一进程的所有线程共享本进程的地址空间,而不同的进程之间的地址空间是独立的。
  2. 资源拥有: 同一进程的所有线程共享本进程的资源,如内存,CPU,IO等。进程之间的资源是独立的,无法共享。
  3. 执行过程:每一个进程可以说就是一个可执行的应用程序,每一个独立的进程都有一个程序执行的入口,顺序执行序列。但是线程不能够独立执行,必须依存在应用程序中,由程序的多线程控制机制进行控制。
  4. 健壮性: 因为同一进程的所有线程共享此线程的资源,因此当一个线程发生崩溃时,此进程也会发生崩溃。 但是各个进程之间的资源是独立的,因此当一个进程崩溃时,不会影响其他进程。因此进程比线程健壮。

3.什么情况用进程,什么情况用线程

  1. 在程序中,如果需要频繁创建和销毁的使用线程。因为进程创建和销毁开销很大(需要不停的分配资源),但是线程频繁的调用只是改变CPU的执行,开销小。
  2. 如果需要程序更加的稳定安全时,可以选择进程。如果追求速度,就选择线程。

4.进程间通信的方式

1.管道:无名管道、命名管道(FIFO) 最慢
2.消息队列:消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等问题.
3.共享内存:共享内存就是映射一段能被其他进程所访问的内存.
这段共享内存由一个进程创建,但多个进程都可以访问,需要考虑进程安全,最快的通信方式
4.信号又称为中断:需要处理什么对应的是中断处理函数,此时设置断点,形参入栈,保存现场信息,然后去执行中断处理函数,当处理完成之后,恢复现场信息,程序继续往下执行
5.套接字:套接字(socket)用于协调不同的进程间的通信,可以是不同计算机上的进程
6.信号量:信号量是一个计数器,可以用来控制多个线程对共享资源的访问,它不是用于交换大批数据,而用于多线程之间的同步

5.哪种通信方式最快

共享内存:共享内存就是映射一段能被其他进程所访问的内存.
这段共享内存由一个进程创建,但多个进程都可以访问,需要考虑进程安全,最快的通信方式

6.有名、无名管道有什么区别

有名管道在同一计算机任意进程之间使用,无名管道在父子进程之间使用。

7.僵尸进程,孤儿进程

7.1孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

7.2僵尸进程

子进程退出了,但是父进程没有用wait或waitpid去获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称为僵死进程。ps命令查看状态为Z(zombie)。
危害:进程号被占用,系统的进程号是有限的,如果产生大量的僵尸进程将无进程号可用

我们寻求如何消灭系统中大量的僵死进程时,答案就是把产生大量僵死进程的那个元凶枪毙掉(也就是通过kill发送sigTerm或者sigKill信号啦)
1.kill杀死元凶父进程(一般不用)
2.父进程用wait或waitpid去回收资源(方案不好)
3.通过信号机制,在处理函数中调用wait,回收资源
通过信号机制,子进程退出时向父进程发送SIGCHLD信号,父进程调用signal(SIGCHLD,sig_child)去处理SIGCHLD信号,在信号处理函数sig_child()中调用wait进行处理僵尸进程。什么时候得到子进程信号,什么时候进行信号处理,父进程可以继续干其他活,不用去阻塞等待

8.linux命令如何给进程发送信号

kill 命令可以发送多种信号到进程。特别有用的信号包括:
SIGHUP(1)
SIGINT(2)
SIGKILL(9)
SIGCONT(18)
SIGSTOP(19)
在 Bash 中,信号名或信号值都可以作为 kill 命令的选项,而作业号或进程号则作为 kill 命令的参数。

9.哪些信号是不可捕获的

SIGKILL(杀死进程)
和SIGSTOP(停止进程执行)不能被捕获

编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)

10.说下有什么IO模型

同步模型(synchronous IO)

阻塞IO(bloking IO)

非阻塞IO(non-blocking IO)

多路复用IO(multiplexing IO)

信号驱动式IO(signal-driven IO)

异步IO(asynchronous IO)

11.同步和异步了解不

12.异步是如何实现的

13.什么是死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

14.死锁条件,如何避免死锁

1、互斥条件:一个资源每次只能被一个进程使用;
2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
3、不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺;
4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系;
预防死锁:
资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

15.中断

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行

你可能感兴趣的:(操作系统基础知识)