前端面试之操作系统——进程&&线程

夏婆子
• 阅读 1851

写在前面

这篇文章是参考了CyC2018大大的总结这篇文章,结合面试中常问的问题提取了部分,相当于是我自己的笔记吧,方便之后查看。


进程和线程

1.什么是进程?

进程是系统进行资源分配和调度的基本单位。进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

2.什么是线程?

线程是系统调度和分派的基本单位。

3.两者的区别

  • 拥有资源
    进程是资源分配的基本单位,但是线程不拥有资源,同一进程中的线程共享进程中的资源。
  • 调度
    线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
  • 系统开销
    进程的开销大:
    1.当创建或撤销进程时,系统都要为之分配或回收资源;
    2.当切换进程时,要保存当前执行进程CPU环境的保存及新调度进程CPU环境的设置。
    线程的开销小:
    只需保存和设置少量寄存器内容。
  • 通信
    线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。

进程的状态

  • 活动就绪->执行:

    1. 运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU。
  • 执行->活动就绪:

    1. 主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的。
    2. 在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。
  • 执行->活动阻塞:

    1. 正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求。
  • 引起挂起状态:

    1. 终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为挂起状态。
    2. 父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
    3. 负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
    4. 操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。

前端面试之操作系统——进程&&线程


进程调度算法

  • 批处理系统

    1. 先来先服务 first-come first-serverd(FCFS)
    2. 短作业优先 shortest job first(SJF)
    3. 最短剩余时间优先 shortest remaining time next(SRTN)
  • 交互式系统

    1. 时间片轮转
    2. 优先级调度
    3. 多级反馈队列
  • 实时系统

    1. 软实时:必须满足绝对的截止时间
    2. 硬实时:可以容忍一定的超时

进程同步

  1. 临界区

    • 对临界资源进行访问的那段代码称为临界区。
    • 为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。
  2. 同步和互斥

    • 同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系。
    • 互斥:多个进程在同一时刻只有一个进程能进入临界区。
  3. 信号量

    • PV操作
    • 使用信号量解决生产者-消费者问题
  4. 管程

进程间通信

  1. 管道

    • 管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。
    • 只支持半双工通信
    • 只能在父子进程或者兄弟进程中使用

前端面试之操作系统——进程&&线程

  1. FIFO

    • 也称为命名管道,去除了管道只能在父子进程中使用的限制。
    • 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。

前端面试之操作系统——进程&&线程

  1. 消息队列

    • 消息队列可以独立于读写进程存在,从而避免了FIFO中同步管道的打开和关闭时可能产生的困难。
    • 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法。
    • 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。
  2. 共享存储

    • 允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。
    • 需要使用信号量用来同步对共享存储的访问。
    • 多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。
  3. 套接字

    • 可用于不同机器间的进程通信。
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这