【面经】操作系统/Linux

1、计算机的五大单元
  • 电脑的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、存储单元五大部分。其中CPU占有控制、算术逻辑单元,存储单元又包含内存与辅助内存;
2、什么是操作系统

操作系统:负责管理协调我们计算机硬件与软件资源工作的一种系统软件计算机安装操作系统,主要就是为了帮助我们屏蔽硬件层的复杂性,给上层的应用软件或用户提供易用的服务。

  • 操作系统=操作系统内核+一堆应用。
  • 操作系统内核:也是代码程序,代码的作用就是(进程管理,内存管理,文件管理,驱动管理等等)。
  • 一堆应用:依附在操作系统用内核上完成某些功能,例如:QQ,微信,飞书等等
3、进程和线程是什么,有什么区别

举个简单例子,我们电脑打开QQ、打开Word,其实就是开了不同的几个进程;而我用 QQ 时,可以一边发消息、一边视频聊天,这就是在进程下开了多个线程处理任务。

区别:

①调度方面:进程可以理解是资源分配的基本单位 ,而线程则是**(CPU调度)任务调度和执行的基本单位**。"

内存方面:进程拥有独立的地址空间与资源 ,同个进程下的线程共享进程的地址空间与资源。

开销方面:线程间切换开销小,进程间切换开销大 。线程切换不需要更换页表 ,而进程切换需要。页表切换就会导致缓存失效,性能就会变低。线程共享进程资源,拥有独立的栈与程序计数器 。进程切换要切换上下文环境,创建的时候需要分配系统资源,销毁时要释放系统资源。

其他区别:比如通信、切换、健壮性等方面。一个进程崩溃,不会对其他进程产生影响;一个线程崩溃,会让同一进程内的其他线程也死掉

4、进程是由什么组成的?

进程总的说来包括**程序段、数据段、PCB**三部分

  1. 程序段就是程序的代码
  2. 数据段就是程序运行时产生的数据(比如全局变量、局部变量等)。
  3. PCB 中包含操作系统对其进行管理的各种信息(如进程标识符 PID,进程当前状态,进程优先级)。process ctrl block(进程控制块)。

5、进程状态有哪些?

就绪/运行/阻塞

  • 就绪:进程已经具备运行条件,但是CPU还没有分配过来;理解为进程已经将运行前的准备工作全部做好了,就等着操作系统调用,占用CPU了,只要操作系统一调用就会变成运行状态。
  • 运行:进程占用CPU,并在CPU上运行;理解为进程正在使用cpu来执行自己的代码
  • 阻塞:进程因等待某件事发生而暂时不能运行;例如:等待IO输入(例如一个函数中写了scanf那么在它就需要用户给他输入参数才能继续往下走),调用某些阻塞接口。
6、虚拟内存

虚拟地址空间是操作系统为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏而引入的。虚拟地址空间是操作系统为一个进程描述的虚拟的、连续的、完整的、线性的地址空间 ,在linux下是一个mm_struct结构体。好处是保证每个进程在各自虚拟地址空间运行,互相不能干扰对方,采用虚拟地址空间,通过页表映射,可以实现进程中的数据在物理内存上的离散式存储,减少了内存碎片,提高了内存的利用率。

虚拟内存使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),使得进程逻辑上有很大的连续内存地址空间

实际上一部分对应物理内存上的块 ,还有一部分没加载进内存的对应在外部磁盘 ,在需要时进行数据交换。这样就可以让程序拥有超过系统物理内存大小可用内存空间

7、操作系统内存管理

它有很多的管理方式,比如**块式管理、页式管理、段式、段页式管理**。"

简单来说,块式就是讲内存分成一个个块,每个块包含一个进程。同理,段式就是将内存分多个段,按段存储......。

8、页面置换算法

先进先出页面置换算法最近最久未使用页面置换算法时钟(CLOCK)置换算法等等

9、页表是什么?

可以理解成一个映射,存储页面与页框对于关系,通过页表对应逻辑地址与物理地址。

10、上下文环境是什么?

cpu在拿数据的时候并不是直接从内存中拿数据。而是从身边的寄存器中拿数据,这时因为cpu对寄存器的读取速度最快。上下文信息是保存的当前程序在运行时寄存器当中的内容,因为寄存器不是进程所拥有的,当他被切换出去时,运行其他进程时当前寄存器当中的内容有可能就改变了。而上下文信息保存当前寄存器当中的内容之后可以在下次运行时快速的找到上一次运行结束时寄存器当中保存的内容。

11、进程间通信方式

操作系统根据不同的场景提供了不同的方式,管道,共享内存,消息队列和信号量。

  • 管道是内核中的一块缓冲区,分为匿名管道和命名管道。匿名管道只能用于具有亲缘关系的进程间;而命名管道可用于同一主机上任意进程间通信。
  • 共享内存的本质是一块物理内存,多个进程将同一块物理内存映射到自己的虚拟地址空间中,再通过页表映射到物理地址达到进程间通信,它是最快的进程间通信方式,相较其他通信方式少了两步数据拷贝操作。
  • 消息队列是内核中的一个优先级队列,多个进程通过访问同一个队列,在队列当中添加或者获取节点来实现进程间通信。
  • 信号量的本质是内核中的一个计数器,主要实现进程间的同步与互斥,对资源进行计数,有两种操作,分别是在访问资源之前进行的p操作,还有产生资源之后的v操作。
12、僵尸进程和孤儿进程

僵尸进程: 子进程先于父进程退出,但是父进程没有进行进程等待,导致无法获取子进程的退出状态信息,使操作系统无法释放子进程的资源,这时候的子进程就是僵尸进程
孤儿进程: 父进程先于子进程退出,则子进程称为孤儿进程,此时孤儿进程的父进程成为了1号进程,并且这个孤儿进程运行在后台,并不占据前台终端

如何处理僵尸进程:kill -9命令。子进程退出时向父进程发送SIGCHLD信号,父进程处理SIGCHLD信号,在信号处理函数中调用wait进行处理僵尸进程

Linux常见的指令
  • 路径类(pwd、cd、ls)
  • 文件类(创建:mkdir文件夹touch文件、移动mv、复制cp、修改名字mv、删除rm、打开/编辑gedit/vi、查看cat)
  • 通讯类(ping ip、ipconfig、hostname -I)
  • 权限(chmod XXX)其中111(7)对应rwx。当前用户,用户组,其他用户。
  • 查看(进程ps)
相关推荐
繁依Fanyi15 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
C-cat.15 分钟前
Linux|环境变量
linux·运维·服务器
yunfanleo30 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m512730 分钟前
LinuxC语言
java·服务器·前端
运维-大白同学1 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎1 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师1 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc