操作系统(1)


操作系统(1)


操作系统(1)

1.说说进程空间从高位到低位都有些什么?

参考回答
在这里插入图片描述
如上图,从高地址到低地址,一个程序由命令行参数和环境变量、栈、文件映射区、堆、BSS段、数据段、代码段组成。
栈区:存储局部变量、函数参数值。栈从高地址向低地址增长。是一块连续的空间。
文件映射区,位于堆和栈之间。
堆区:动态申请内存用。堆从低地址向高地址增长。
BSS 段:存放程序中未初始化的全局变量和静态变量的一块内存区域。
数据段:存放程序中已初始化的全局变量和静态变量的一块内存区域。
代码段:存放程序执行代码的一块内存区域。只读,代码段的头部还会包含一些只读的常数变量。

2.32位系统能访问4GB以上的内存吗?

参考回答
正常情况下是不可以的。原因是计算机使用二进制,32位正好是2^32,正好是4G,所以大于4G就没办法表示了,而在32位的系统中,因其它原因还需要占用一部分空间,所以内存只能识别3G多。要使用4G以上就只能换64位的操作系统了。
但是使用PAE技术就可以实现 32位系统能访问4GB以上的内存。

3.请你说说并发和并行

参考回答

并发:对于单核CPU,同一时刻只有一个进程在运行,宏观上并发执行,微观上交替执行。
并行:对于多个CPU或多核CPU,多个进程同时运行,同时向前推进。

4.说说进程、线程、协程是什么,区别是什么?

参考回答
进程:进程是程序的一次执行,是动态的,是系统进行资源分配和调度的独立单位。
线程:线程是进程的一个执行路径,一个进程可以有多个线程,可以并发。
协程:协程是用户态的轻量级线程,不被系统内核管理,完全是由程序所控制。性能好,不会像线程切换那样消耗资源。
区别:
线程与进程的区别:
①一个进程可以包含多个线程;
②进程拥有独立的内存单元,多个线程共享进程的资源,如代码段、数据段、扩展段;但每个线程拥有自己的线程ID和栈区;
③一个线程挂掉,对应的进程挂掉;一个进程挂掉,不会影响其他进程;
④进程系统开销显著大于线程开销;线程需要的系统资源更少。
线程与协程的区别:(轻量级的体现)
①一个线程可以有多个协程,因此协程不需要多线程的锁机制;
②协程性能高,效率高,没有线程那样来回切换的消耗资源。

5.说说Linux的fork?

参考回答
fork函数用来创建一个子进程。
对于父进程,fork()函数返回新创建的子进程的PID。
对于子进程,fork()函数调用成功会返回0。
如果创建出错,fork()函数返回-1。
fork()函数创建一个新进程后,会为这个新进程分配进程空间,将父进程的进程空间中的内容复制到子进程的进程空间中(包括父进程的数据段和堆栈段),并且和父进程共享代码段。

6.说说什么是孤儿进程,什么是僵尸进程,如何解决?

参考回答
僵死进程:子进程先于父进程结束,父进程没有获取子进程的退出码(pcb)(子进程没有被处理),子进程变成僵死进程。(如果父进程先死掉了,子进程就不会变成僵死进程,系统会自动分配进程去解决子进程)
孤儿进程:随后,当父进程结束后,僵死进程变成孤儿进程。
系统init pid = 1,系统把孤儿进程给一个新的进程(id为1的进程),该新进程充当父进程,接收孤儿进程的退出码,孤儿进程被处理后消失,内存释放。
如何解决? 原父进程调用wait()即可。

7.说说什么是守护进程?

参考回答
守护进程:守护进程是运行在后台的一种生存期长的特殊进程。它独立于控制终端,处理一些系统级别任务。

8.进程间通信方式有哪些?

参考回答
进程间通信主要包括管道、信号量、消息队列、共享内存、套接字socket。

9.说说进程同步和线程同步的方式?

参考回答
进程同步:
①管道:同一时刻只允许一个进程访问临界区(管道)的资源。
②信号量semaphore:是一个计数器,同一时间允许一定数量的线程拥有临界资源。P操作(递减操作)可以用于阻塞一个进程,V操作(增加操作)可以用于解除阻塞一个进程。
③消息队列:消息的链接表,放在内核中。消息队列独立于发送与接收进程,进程终止时,消息队列及其内容并不会被删除;消息队列可以实现消息的随机查询,可以按照消息的类型读取。
线程同步:
①互斥锁:同一时刻只允许一个线程访问临界资源。
②信号量:计数器,同一时间允许一定数量的线程拥有临界资源。
③条件变量:通过条件变量通知操作的方式来保持多线程同步。
④读写锁:读写锁与互斥锁类似。但是读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率比互斥锁高。

10.说说Linux进程调度算法及策略有哪些?

参考回答
先来先服务调度算法、高优先级优先调度算法、短作业(进程)优先调度算法、时间片轮转法。
①先来先服务调度算法:
每次调度都是从进程队列中选择最早进入该队列的作业,将其调入内存,放入就绪队列。
②高优先级优先调度算法:
每次调度都是从进程队列中选择优先权最高的作业,将其调入内存,放入就绪队列。
③短作业(进程)优先调度算法:
每次调度都是从进程队列中选择运行时间最短的作业,将其调入内存,放入就绪队列。
④时间片轮转法:每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片用完时,将它送往就绪队列的末尾,然后再把CPU分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
在这些调度算法中,有抢占式和非抢占式的区别。
①非抢占式优先权算法:
在这种方式下,系统一旦把CPU分配给某个进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一个进程。
②抢占式优先权调度算法:
在这种方式下,某一进程执行期间,如果出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
区别:
非抢占式(Nonpreemptive):让进程运行直到结束或阻塞的调度方式,容易实现,适合专用系统,不适合通用系统。 抢占式(Preemptive):允许将逻辑上可继续运行的在运行过程暂停的调度方式可防止单一进程长时间独占,CPU系统开销大(降低途径:硬件实现进程切换,或扩充主存以贮存大部分程序)

11.说说进程有多少种状态?

参考回答
进程有五种状态:创建、就绪、执行、阻塞、终止。
一个进程创建后,被放入队列处于就绪状态,等待操作系统调度执行,执行过程中可能切换到阻塞状态(并发),任务完成后,进程销毁终止。
在这里插入图片描述

12.进程通信中的管道实现原理是什么?

参考回答
在内核中开辟一块缓冲区(称为管道)用于两个进程间的单向通信。
管道分为有名管道和无名管道。有名管道允许任意两个进程间通信;无名管道只能用于父子进程间的通信。
有名管道:
终端直接make fifo建立管道,不同进程可以直接写入/读取管道数据。
无名管道:
int pipe(int fd[2]); //fd[0]读端,fd[1]写端
进程内部先pipe创建管道,再使用fork() 创建一个子进程,然后通过管道实现父子进程间的通信。
过程:
①父进程pipe开辟管道,再fork创建子进程;
②父进程用来写入数据,关闭fd[0];子进程用来读数据,关闭fd[1]。

13.简述mmap的原理和使用场景

参考回答
原理:
它是内存映射的方法。
即将一个文件或者其他对象映射到进程的地址空间,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上。

14.说说常见信号有哪些?

参考回答
而常见信号如下:

1	SIGHUP	让进程立即关闭并重启
9	SIGKILL	立即结束程序的运行,强制中止进程
15	SIGTERM	正常结束进程的信号,kill 命令的默认信号如果进程已经发生了问题,那么这个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
17	SIGCHLD	子进程结束时, 父进程会收到这个信号

15.说说什么是死锁,产生的条件,如何解决?

参考回答
死锁: 一组进程中,每个进程都在等待仅由同组其他进程才能引发的事件,那么称这种情况是死锁的。
产生条件:
①互斥条件:同一时刻只允许一个进程访问临界资源。
②请求保持条件:进程获得一定资源后,又对其他资源发出请求,但该资源被其他进程占有,此时请求阻塞,而且该进程不会释放自己已经占有的资源;
③不可抢占条件:进程已获得的资源,只能自己释放,不可剥夺;
④循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
如何解决:
①剥夺资源
②撤销进程

16.有了进程,为什么还要有线程?

参考回答
①进程间来回切换会引起额外的开销,并且也比较耗时;但线程切换速度快,开销小。
②进程间信息难以共享,必须采用一些进程间通信;但多个线程共享进程的内存,如代码段、数据段、扩展段,线程间进行信息交换十分方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值