面试题-操作系统

谈谈你对内核态的理解,操作系统什么时候会陷入内核态,如何避免?硬件资源的分配 和使用(分配内存,访问io ,使用cpu时间,)以及各种软硬件异常的处理。

https://www.zhihu.com/question/34961860

2.什么是内核线程?答:Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。

3.fork()函数族和clone()函数族的区别,什么是写时复制,为什么要用这种方式

4.exec()和fork()的区别?答: fork 生成当前进程的一个相同副本,该副本称之为子进程。原进程的所有资源都以适当的方式复制到子进程,因此该系统调用之后,原来的进程就有了两个独立的实例。这两个实例的联系包括: 同一组打开文件、同样的工作目录、内存中同样的数据(两个进程各有一份副本),等等。此外二者并无关联。

exec 从一个可执行的二进制文件加载另一个应用程序,来代替当前运行的进程。换句话说,加载了一个新程序。因为 exec 并不创建新进程,所以必须首先使用 fork 复制一个旧的程序,然后调用 exec 在系统上创建另一个应用程序。

 https://blog.csdn.net/xiaofei0859/article/details/77342173

5.常用linux指令,查看端口情况,网络情况,内存情况的指令:top,free

6.linux有两种实时调度策略,谈谈你对它们的理解? SCHED_FIFO(先入先出的调度算法)和SCHED_RR(带有时间片的SCHED_FIFO -- 这是一种实时轮流调度算法)

参考:https://blog.csdn.net/hanchaoman/article/details/6247440

7.linux提供了哪些同步方法?答:父进程通过fork可以将打开文件的描述符传递给子进程,子进程结束时,父进程调用wait可以得到子进程的终止信息。几个进程可以在文件系统中读写某个共享文件,也可以通过给文件加锁来实现进程间同步。进程之间互发信号,一般使用SIGUSR1和SIGUSR2实现用户自定义功能管道。FIFO mmap函数,几个进程可以映射同一内存区UNIX Domain Socket,目前最广泛使用的IPC机制。

8.谈谈对linux中信号量的理解?答:信号量是一种特殊的变量,访问具有原子性。只允许对它进行两个操作:1)等待信号量:当信号量值为0时,程序等待;当信号量值大于0时,信号量减1,程序继续运行。2)发送信号量,将信号量值加1。我们使用信号量,来解决进程或线程间共享资源引发的同步问题。

9、进程间通信有哪些,详细说明自己在哪种场景下用过哪种方式?管道、FIFO、消息队列、信号量、共享内存已经socket。Qt槽事件

2.死锁产生的条件?

4.os中管道的实现,问的很深,记不到具体的问题了

5.分段和分页解释一下?答:分段:把虚拟地址空间映射到了物理地址空间,并且你写的程序操作的是虚拟地址。分页:是一种虚拟地址空间到物理地址空间映射的机制。但是,粒度更加的小了。单位不是整个程序,而是某个“页”,一段虚拟地址空间组成的某一页映射到一段物理地址空间组成的某一页。

6.虚拟地址、逻辑地址、线性地址、物理地址的区别?答:逻辑地址 ----(段表)---> 线性地址 — (页表)—> 物理地址

参考:https://blog.csdn.net/yusiguyuan/article/details/9664887

7.协程和线程和进程的区别,谈谈你的理解?答:进程、线程、协程的区别主要体现在执行体的颗粒度上。最初的执行体任务比较简单,用一个进程就能满足需求,随着执行体做的事情越来越复杂,就出现了进程内多任务的需求。

进程内的执行体,被称为线程,它作为进程的子执行体,创建和运行成本小很多。线程是执行任务的最小单元,每个线程具有独立的栈空间,并共享堆空间。进程和线程都属于系统级的任务,切换进程、线程都需要经历用户态跃迁内核态,切换成功后再由内核态切回用户态。协程是为了同步代码,做异步任务。

参考:https://github.com/iostalks/Blog/issues/1

8、Linux现在发行到哪个版本了?你一般用Centos还是Ubuntu啊,为什么?

9、Linux下查看内存使用命令是什么?查看负载的命令是什么?top,free

2、Linux下如何查看网络中服务器状态?netstat

参考:https://blog.csdn.net/season1201/article/details/54092072

3、Linux下TCP服务器都有什么状态?https://www.cnblogs.com/qingergege/p/6603488.html

4、Linux下TIME_WAIT和CLOSE_WAIT区别是什么?答:TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。  由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接。

CLOSE_WAIT是被动关闭连接是形成的。

5、知道epoll和select吗? select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

操作系统中的PV操作是做什么用的,能否举个例子?答:PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。

 

发布了176 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_27262727/article/details/104905215