大数据 > 我和面试官之间关于操作系统的一场对弈|原力计划

我和面试官之间关于操作系统的一场对弈|原力计划

2020-05-02 21:00阅读(68)

作者| 指导兄弟 编辑器| 吴兴龄 产品| CSDN博客 您好,我是指导兄弟! 许多读者抱怨说,计算机操作系统的知识很复杂,他们没有太多的耐心去看它,但是他们经常在

1

作者| 指导兄弟

编辑器| 吴兴龄

产品| CSDN博客

您好,我是指导兄弟! 许多读者抱怨说,计算机操作系统的知识很复杂,他们没有太多的耐心去看它,但是他们经常在采访中遇到它。 因此,这里是我分类的操作系统的常见问题解答! 本文总结了一些与操作系统有关的重要问题,例如进程管理,内存管理,虚拟内存等。

的形式是通过大多数面试官和求职者之间的对话发展起来的。 另外,兄弟指南只在上大学时才研究操作系统,但他基本上忘记阅读许多相关书籍和博客来撰写本文。 如果文章中有任何需要补充和改进的地方,可以在评论区域中指出。 如果您认为内容不错,请不要忘记单击它! 我个人认为,很好地学习操作系统非常有用。 有关详细信息,请参阅我昨天在地球上分享的一段文章:

只是操作系统某些重要概念的概述。 如果您想深入学习,建议您如实阅读。 此外,本文的许多内容都引用了现代操作系统的第三版。 非常感谢你。

操作系统基础

1.1什么是操作系统?

一种A一种A采访者:让我们从一个简单的问题开始! 什么是操作系统?

一种我:让我通过以下四点向您介绍操作系统!

:内核负责管理系统的进程,内存,设备驱动程序,文件和网络系统,这决定了系统的性能和稳定性。 它是应用程序和硬件之间的桥梁。

内核是操作系统背后黑匣子的核心。

扩展全文

1.2系统调用

一种A一种Interviewer:什么是系统调用? 能不能给我详细介绍。

一种Me:在介绍系统调用之前,让我们看一下用户状态和系统状态。 根据进程访问资源的特性,我们可以将系统上运行的进程分为两个级别:在

表示用户状态和系统状态之后,系统调用是什么? 我们运行的程序基本上处于用户状态。 如果我们称操作系统提供的系统状态级别子功能怎么办? 然后,您需要系统调用!

意味着在我们运行的用户程序中,与系统状态级资源相关的所有操作(例如文件管理,过程控制,内存管理等)必须通过系统调用模式向操作系统提出服务请求,并且 由操作系统完成。 这些系统调用

可以根据其功能分为以下几类:

进程与线程

2.1进程与线程

的区别A一种A一种A采访者:好! 哦,我明白了! 然后您再说一遍:进程和线程之间的区别。

一种我:好! 下图显示了JAVA存储区。 让我们从JVM的角度讨论线程与进程之间的关系! 如果您对JAVA内存区域(运行时数据区域)了解不多,则可以阅读本文:这可能是关于JAVA内存区域的最清晰的文章。 从上图可以看出:一个进程可以有多个线程,并且多个线程共享进程的堆和方法区域(JDK1.8元空间),但是每个线程都有自己的程序计数器,虚拟机堆栈和 本地方法堆栈。

摘要:线程是一个较小的运行单元,分为多个进程。 一个进程可以在其执行期间生成多个线程。 线程和进程之间的最大区别是,每个进程基本上是独立的,而每个线程不一定是独立的,因为同一进程中的线程很可能会相互影响。 线程执行的开销很小,但是不利于资源的管理和保护; 过程是相反的。

2.2进程的状态是什么A某种A的类型是访问者:进程的状态是什么Me:我们通常将进程分为五个状态,这与线程非常相似!

2.3进程之间的通信模式

一种A一种A Interviewer:在进程之间进行通信的常用方法是什么?

一种Me:在流程之间进行通信的大约七种常见方法。

的以下摘要部分指的是IPC(进程间通信)文章。 建议阅读,总结非常好。

2.4线程之间的同步

一种A一种Interviewer:什么是同步线程的方法?

一种Me:线程同步是共享关键资源的两个或多个线程的并发执行。 线程应该同步以避免严重的资源使用冲突。 操作系统一般具有以下三种线程同步方式:

2.5进程调度算法

一种A一种Interviewer:您知道操作系统中进程的调度算法吗? 嗯! 这是我们在大学中学到的非常重要的知识点!

为了确定首先执行哪个进程以及最后执行哪个进程以获得最大的CPU利用率,计算机科学家定义了一些算法,这些算法为:

优先服务(FCFS)调度算法:从就绪队列中,选择 一个进程,该进程首先进入队列以为其分配资源,并使其立即执行直到完成或发生事件,然后在被阻塞以放弃CPU时对其进行重新调度。 短作业优先(SJF)调度算法:从就绪队列中选择估计运行时间最短的进程来分配资源,使其立即执行并继续执行直到完成或事件发生,然后在被阻塞并重新调度时重新调度 放弃CPU。 时间片轮换调度算法:时间片轮换调度是最古老,最简单,最公平,使用最广泛的算法,也称为RR(循环)调度。 每个进程都分配了一个时间段,称为其时间片,这是允许该进程运行的时间。 多级反馈队列调度算法:前面几种过程调度算法都有一定的局限性。 例如,短进程优先调度算法仅考虑短进程,而忽略长进程。 多级反馈队列调度算法不仅可以使高优先级的作业做出响应,还可以使短的作业(流程)快速完成。 因此,这是一种更好的进程调度算法,被UNIX操作系统采用。 优先级调度:为每个进程分配优先级,首先以最高优先级执行该进程,依此类推。 具有相同优先级的进程以FCFS模式执行。 可以根据内存需求,时间需求或任何其他资源需求来确定优先级。 操作系统内存管理基础

3.1内存管理简介

一种A一种A Interviewer:操作系统内存管理的主要目的是什么?

一种:操作系统的内存管理主要负责内存的分配和恢复(malloc功能:申请内存,free功能:释放内存)。 另外,地址转换,即将逻辑地址转换为相应的物理地址,也是操作系统内存管理的工作。

3.2常见的内存管理机制

一种A一种A Interviewer:您了解操作系统的内存管理机制吗? 内存管理有哪些方法?

一种我:我在学习操作系统时就了解了这一点。

简单地分为连续分布管理和不连续分布管理。 连续分配管理是指为用户程序分配连续的存储空间,例如块管理。 类似地,不连续分配管理允许程序使用分布在离散或不相邻存储器中的存储器,例如页面管理和段管理。

一种A一种A面试官:好答案! 但是,错过了非常重要的细分和页面管理机制。 段页面管理机制结合了段管理和页面管理的优点。 简而言之,段页面管理机制是将主存储器首先划分为多个段,每个段被划分为多个页面,也就是说,段页面管理机制的段与内部段之间的段都是 离散的。

一种我:谢谢! 只是忘记了这一点-

3.3快速表和多级页面表

一种A一种A访问者:页面表管理机制中有两个非常重要的概念:快速表和多级页面 表,分别解决了页表管理中的两个非常重要的问题。 请给我简单介绍!

的一种Me:在分页内存管理中,有两个要点:从

虚拟地址到物理地址的转换应该很快。

解决了虚拟地址空间大和页表大的问题。

快速表

为了解决虚拟地址到物理地址的转换速度,操作系统基于页表方案引入了快速表来加速虚拟地址到物理地址的转换。 我们可以将块表理解为一种特殊的缓存,其中的内容是页表的一部分或全部。 作为页表的高速缓存,它具有与页表相同的功能,但是可以提高访问速度。 因为页表用于地址转换,所以CPU在读取和写入内存数据时访问主内存两次。 使用快速表,有时您只需要访问一次高速缓存存储器和一次访问主存储器,这可以加快搜索速度并提高指令的执行速度。 在

中使用快速表后的地址转换过程如下:阅读

后,您会发现我们在开发系统(例如Redis)中经常使用的快速表和缓存确实是很多想法和经典 可以在我们日常开发中使用的各种工具或框架中找到操作系统中的算法。

多级页表

引入多级页表的主要目的是避免一直将所有页表都放在内存中,尤其是那些根本不需要的页表不必保留在内存中。 多级页表属于典型的空间时间场景。 有关详细信息,请参阅以下文章

如何为多级页面表保存内存:https://www.polarxiong.com/archives/如何为多级页面表保存内存。html

摘要

为了提高存储器的空间性能,提出了多级页表的概念。 但是空间性能是基于时间性能的浪费,因此,为了补充丢失的时间性能,提出了快速表(TLB)的概念。 实际上,快速表和多级页表都利用了程序的局部性原理,该原理将在后面的虚拟内存部分中介绍。

3.4分页机制和分段机制之间的共同点和差异

一种A一种A采访者:分页机制和分段机制之间的异同是什么?

一种I:

公用:

区别:

3.5逻辑(虚拟)地址和物理地址p