操作系统面试题

1.进程 线程 协程

1.进程是程序的一次执行,是资源分配的基本单位。一个进程可以拥有多个线程。每个进程间往往是独立的。从Java内存区域来讲...
2.线程是CPU调度的基本单位,可以有多个协程。线程间往往会相互影响。线程开销小。线程依赖于进程而存在,一个进程至少有一个线程;进程有自己的独立地址空间,线程共享所属进程的地址空间;
3.协程
在一个子程序中断,之后执行其他函数,但不是函数调用。下面中的输出结果就是执行了函数A后可能随机执行B,又可能随时执行A。每个协程有独立的栈,而栈既保留了变量的值,也保留了函数的调用关系、参数和返回值。
优势:

  1. 没有线程切换的开销
  2. 只有一个线程,因此操作共享资源不需要加锁
def A():
    print '1'
    print '2'
    print '3'

def B():
    print 'x'
    print 'y'
    print 'z'
//可能的输出
1
2
x
y
3
z

2.进程通信方式

1.匿名管道(父子进程或兄弟进程)

特点:

  • 半双工(数据只能由一端流向另外一端,通信需要两个管道)
  • 有亲缘关系的进程
  • 写的一端写到尾部,读的一段从头部读
  • 没有格式的字节流,双方要知道每次读写多少字节
  • 只存在内存中的文件
2.管道
  • 读写类似匿名管道,只是可以扩展到任意进程
  • 以读的方式打开管道前,必须有另外一个进程以写的方式打开管道,否则会阻塞。
  • 存在磁盘上
3.信号
  • 信号可以在任何时候发给某一进程,而无需知道该进程的状态。
  • 如果接受信号的进程未处于Running,则由内核保存起来,等进程恢复执行时再传递给它
  • 信号可以再用户进程和内核交互
  • 来源由ctrl+c kill命令等
4.消息队列
  • 存在于内核中的消息链表
  • 某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。
5.共享内存
  • 进程共享的一块内存区域
6.信号量
7.套接字

3.线程通信方式

  1. volatile
  2. synchronized+wait/notify
  3. yield()
  4. Condition
  5. join
  6. CountDownLatch CyclicBarrier Semaphore

4.虚拟内存

  • 使得可以用户多于物理地址大小的内存空间
  • 使得应用程序认为自己有连续的可用内存

5.从硬盘加载到内存的过程

6.页面置换算法

  1. FIFO
  2. LRU
  3. LFU
  • 淘汰用的最少的
  1. OPT

7.分页分段

5.进程调度算法

抢占式指的是当前有进程正在进行,此时新来一个高优先级的进程,此时就切换到该进程执行。下面的3,4,6支持抢占
1.先来先服务

  • 选择就绪队列中等待时间最长的进程
    2.短作业优先
  • 下一次执行耗时最短的作业
    3.时间片轮转法
    分配一个时间片,就绪队列中每个进程都执行这么长的时间。如果用不了这么长时间就执行完了,就会调度下一个进程。
    4.最短剩余时间优先
  • 每次选剩余执行时间最少的进程执行,如果突然来了一个更小的,则抢占。
    5.最高响应比优先
    相应比 = (已经等待的时间 + 进程执行要花的时间)/ 进程执行要花的时间
    6.多级反馈队列
  • 设置多个就绪队列,并为各个队列赋予不同的优先级。在优先权越高的队列中,为每个进程所规定的执行时间片就越小。
  • 当一个新进程进入内存后,首先放入第一队列的末尾,按照先来先去原则排队等候调度。如果他能在一个时间片中完成,便可撤离;如果未完成,就转入第二队列的末尾,同样等待调度.....如此下去,当一个长作业(进程)从第一队列依次将到第n队列(最后队列)后,便按第n队列时间片轮转运行。
  • 仅当第一队列空闲的时候,调度程序才调度第二队列中的进程运行;仅当第1到(i-1)队列空时,才会调度第i队列中的进程运行,并执行相应的时间片轮转。
  • 如果处理机正在处理第i队列中某进程,又有新进程进入优先权较高的队列,则此新队列抢占正在运行的处理机,并把正在运行的进程放在第i队列的队尾。

12.虚拟地址空间

c语言中的地址

6.为什么要有协程

每个协程有独立的栈,而栈既保留了变量的值,也保留了函数的调用关系、参数和返回值在64位linux中,线程的栈有 8MB,而协程栈的大小通常只有几十 KB。

  • 节省CPU。当线程时间片用完或调用了阻塞的函数后会进行线程上下文的切换,造成CPU资源的浪费。协程是用户态的线程,用户可以自行控制协程的创建于销毁,极大程度避免了系统级线程上下文切换造成的资源浪费。
  • 节省内存。在 64 位的 Linux 中,一个线程需要分配 8MB 栈内存和 64MB 堆内存,系统内存的制约导致我们无法开启更多线程实现高并发。而在协程编程模式下,可以轻松有十几万协程,这是线程无法比拟的
  • 开发效率,使用协程在开发程序之中,可以很方便的将一些耗时的 IO 操作异步化,例如写文件、耗时 IO 请求等。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • 进程和线程以及它们的区别 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; ...
    六艺str阅读 500评论 0 0
  • 写在前面: 找工作告一段落,期间经历了很多事情,也思考了许多问题,最后也收获了一些沉甸甸的东西 —— 成长和一些来...
    java爪哇阅读 855评论 0 2
  • 1 进程和线程 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独...
    川少叶阅读 3,014评论 0 6
  • 1. 进程与线程的区别 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一...
    Briarbear阅读 588评论 0 4
  • 1、进程和线程以及它们的区别: 进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的...
    Lovealfy阅读 205评论 0 0