互联网面试知识点总结(二)- 操作系统篇

本文详细梳理了操作系统面试中的重点知识,包括进程调度(状态、进程与线程的区别、线程共享变量)、内存管理(内存分配、页式存储、内存碎片)、文件系统、Linux命令以及CPU调度算法等。探讨了为何引入线程、进程间通信方式、线程模型、Linux锁机制、死锁的概念和解决方案,以及各种内存分配策略。通过对这些知识点的深入理解,有助于准备互联网面试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

******************************* 进程调度 *****************************

一. 进程的状态

进程在其生命周期内,由于系统中个进程之间的相互制约关系以及系统的运行环境的变化,使的进程的状态也在不断地发生着变化。通常进程有以下五种状态。前三种是进程的基本状态

  1. 运行状态:进程正在处理器上运行。在单处理器的环境下,每一时刻最多只有一个进程处于运行状态
  2. 就绪状态:进程已处于准备运行的状态,即进程获得了除CPU之外的一切所需资源,一旦得到处理器即可运行。
  3. 阻塞状态:又称为等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理器),或等待输入输出的完成,即使处理器空闲,该进程也不能运行
  4. 创建状态:进程正在被创建,尚未转到就绪状态
  5. 结束状态:进程正在从系统中消失,这可能是进程正常结束或其他原因中断退出运行

二. 进程和线程的区别

  1. 进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发,线程是进程的子任务,是CPU调度和分派的基本单位,用于实现进程内的并发
  2. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程,线程依赖进程而存在
  3. 进程在执行过程中拥有独立的内存空间,而多个线程共享同一个内存空间(进程的内存空间)
  4. 在系统开销上,进程创建、撤销和切换的开销远大于线程的开销

三. 线程共享哪些变量

******************************* 内存管理 *****************************

******************************* 文件系统 *****************************

****************************** Linux命令 ****************************

什么是操作系统

  1. 操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石
  2. 操作系统本质上是运行在计算机上的软件程序
  3. 操作系统为用户提供一个与系统交互的操作界面
  4. 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核可以理解为能直接操作硬件的程序)
    PS:内核负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,决定着系统的性能和稳定性。是连接应用程序和硬件的桥梁。内核就是操作系统背后黑盒的核心

并发和并行

  1. 并发(concurrency):指宏观上看起来两个程序在同时运行,比如说在单核 cpu 上的多任务。但是从微观上看两个程序的指令是交织着运行的,你的指令之间穿插着我的指令,我的指令之间穿插着你的,在单个周期内只运行了一个指令。这种并发并不能提高计算机的性能,只能提高效率。
  2. 并行(parallelism):指严格物理意义上的同时运行,比如多核 cpu,两个程序分别运行在两个核上,两者之间互不影响,单个周期内每个程序都运行了自己的指令,也就是运行了两条指令。这样说来并行的确提高了计算机的效率。所以现在的 cpu 都是往多核方面发展。

用户态和内核态

用户态和内核态是操作系统的两种运行级别,两者最大的区别就是特权级不同。用户态拥有最低的特权级,内核态拥有较高的特权级。运行在用户态的程序不能直接访问操作系统内核数据结构和程序。内核态和用户态之间的转换方式主要包括:系统调用,异常和中断

系统调用

操作系统创建一个新进程的过程?

  1. 为新进程分配唯一一个进程标识符,并申请一个空白的PCB。
  2. 为进程分配资源,为新进程的程序和数据,以及用户占分配必要的空间。
  3. 初始化PCB,主要包括初始化标识信息、初始化处理器状态信息和初始化处理器控制信息,以及设置进程的空闲及
  4. 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行

操作系统终止进程的过程?

  1. 根据被终止进程的标示符,检索PCB,从中读出该进程的状态
  2. 若被终止进程处于执行状态,立即终止该进程的执行,将处理器资源分配给其他进程
  3. 若该进程还有子进程,则应将其所有子进程终止
  4. 将该进程所拥有的资源、或归还给父进程或归还给操作系统
  5. 将该PCB从所在队列(链表)中删除

为什么有了进程还要引入线程

  1. 从资源上来讲,线程是一种非常"节俭"的多任务操作方式。在 linux 系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式
  2. 从切换效率上来讲,运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的 30 倍左右
  3. 从通信机制上来讲,线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进城下的线程之间贡献数据空间,所以一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。

进程间通信方式

  1. 消息队列
    消息队列独立于发送与接收数据,进程终止时,消息队列及其内容并不会被删除,消息队列可以实现消息的随机查询,也可以按照消息类型读取
  2. 信号量
    信号量是一个计数器,可以用来控制多个进程对共享资源的访问,用于实现进程间的互斥和同步,而不是存储进程间的通信数据,若要进程间传递数据需要信号量结合共享内存
  3. 信号
    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
  4. 共享内存
    使得多个进程可以访问同一块内存,但需要依赖互斥锁和信号量
  5. 套接字
    用于不同主机之间进程间的通信
  6. 匿名管道
    匿名管道是半双工的,数据只能在一个方向上传输,只能用于具有亲缘关系的进程之间通信(父子进程或者兄弟进程)
  7. 有名管道
    有名管道可以再无关的进程之间传递信息,FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中
    详解点击传送门

常用线程模型

  1. Future 模型
    该模型通常在使用的时候需要结合 Callable 接口配合使用。Future 是把结果放在将来获取,当前主线程并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值