操作系统面经

用户态内核态

区别

  • 内核态: 一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态),内核态可以使用特权指令,运行操作系统程序。
  • 用户态: 一个任务(进程)执行自己的代码时,我们称进程运行在用户态,处于用户态的程序只能使用非特权指令

用户态切换内核态方法

  • 系统调用(主动):如调用open打开一个IO设备等
  • 异常: 如进程访问非法内存死机、使用内存时缺页中断等
  • 外围设备的中断: 磁盘IO完成等

切换代价

进程在内核态和应用态分别有自己独立的两个栈,当系统调用发生,进程切换到内核态栈,内核态为了安全起见会进行一系列安全检查,消耗资源;另外,切换到内核态时,需要保存用户态上下文,如寄存器的值,待内核态执行完成后还需要还原用户态的上下文,继续任务,这个过程也比较消耗资源。

内存管理

虚拟内存:

32位的linux系统每个进程有4个G的连续线性空间,其中低3G为用户态地址空间,高1G空间为内核态地址空间。用户地址空间又被划分为代码段、数据段、BSS段、堆、共享存储器映射段、栈段。这些虚拟地址空间一开始并未对应于物理地址上,只有当被使用时才会由内核的缺页中断映射到具体的物理地址上。

内存管理:

linux系统使用分页机制管理内存的,为了更高效和更经济的管理内存,进程线性地址被分为以固定长度为单位的组,称为页(一般为4K);页内部连续的线性地址空间被映射到连续的物理地址中。我们举一个例子来说明:


图片来源于网络

我们可以看到进程1和进程2的虚拟地址空间都被映射到了不连续的物理地址空间内(这个意义很大,如果有一天我们的连续物理地址空间不够,但是不连续的地址空间很多,如果没有这种技术,我们的程序就没有办法运行),甚至他们共用了一部分物理地址空间,这就是共享内存。
  进程1的虚拟页VP2和VP3被交换到了磁盘中,在程序需要这两页的时候,Linux内核会产生一个缺页异常,然后异常管理程序会将其读到内存中。

cache和buffer

  • cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到加快访问速度的作用。Cache是系统两端处理速度不匹配时的一种折衷策略。
  • buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数(比如从网上下电影,你不能下一点点数据就写一下硬盘,而是积攒一定量的数据以后一整块一起写,不然硬盘都要被你玩坏了)。buffer是系统两端处理速度平衡(从长时间尺度上看)时使用的。

进程和线程

区别

  • 进程是资源分配的最小单位,线程是CPU调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
  • 线程共享进程的地址空间,但每个线程又独自享有自己的栈空间,线程切换的时候实际上切换的是一个可以称之为线程控制块的结构,里面保存所有将来用于恢复线程环境必须的信息,包括所有必须保存的寄存器集,线程的状态等

进程通信方式

  • 信号量
    信号量用来管理临界资源的。它本身只是一种外部资源的标识,不具有数据交换功能,而是通过控制其他的通信资源实现进程间通信。

  • 管道:
    父子进程通信,打开一对pipe,父子进程一个读一个写,只能用于具有亲缘关系的进程间通信

  • 命名管道:
    命名管道是一个存在于硬盘上的文件,而管道是存在于内存中的特殊文件。所以当使用命名管道的时候必须先open将其打开, mkfifo("myfifo",S_IFIFO|0666); //创建一个存取权限为0666的命名管道
    命名管道可以用于任何两个进程之间的通信,不管这两个进程是不是父子进程,也不管这两个进程之间有没有关系

  • 消息队列

  • 共享内存
    int shmget(key_t key, size_t size, int shmflg);
    共享内存是这五种进程间通信方式中效率最高的。但是因为共享内存没有提供相应的互斥机制,所以一般共享内存都和信号量配合起来使用

  • 域套接字
    类似命名管道,也是会生成一个文件,只是该文件是socket文件,用于进程通信,如mysql

中断

硬中断

设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。----和IO外设有关

软中断

软中断是执行中断指令产生的,Linux为了满足实时系统的要求,中断处理应该是越快越好。因此设计了该机制,让硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。
常见软中断:网络包的收发、程序调度、高精度定时器、任务优先级管理等

CoreDump

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. 我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息

mmap

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

mmap优点共有一下几点:
1、对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代I/O读写,提高了文件读取效率。
2、实现了用户空间和内核空间的高效交互方式。两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉。
3、提供进程间共享内存及相互通信的方式。不管是父子进程还是无亲缘关系的进程,都可以将自身用户空间映射到同一个文件或匿名映射到同一片区域。从而通过各自对映射区域的改动,达到进程间通信和进程间共享的目的。同时,如果进程A和进程B都映射了区域C,当A第一次读取C时通过缺页从磁盘复制文件页到内存中;但当B再读C的相同页面时,虽然也会产生缺页异常,但是不再需要从磁盘中复制文件过来,而可直接使用已经保存在内存中的文件数据。
4、可用于实现高效的大规模数据传输。内存空间不足,是制约大数据操作的一个方面,解决方案往往是借助硬盘空间协助操作,补充内存的不足。但是进一步会造成大量的文件I/O操作,极大影响效率。这个问题可以通过mmap映射很好的解决?;痪浠八担彩切枰么排炭占浯婺诖娴氖焙?,mmap都可以发挥其功效

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

推荐阅读更多精彩内容

  • 1.死锁相关 简述什么是死锁?死锁出现的原因? 死锁:多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这...
    小刘一定要努力阅读 561评论 0 0
  • 技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 一....
    CurryCoder阅读 1,422评论 0 2
  • 1.进程的常见状态?以及各种状态之间的转换条件? 就绪:进程已处于准备好运行的状态,即进程已分配到除CPU外的所有...
    雪上霜阅读 550评论 0 0
  • 1.进程的常见状态?以及各种状态之间的转换条件?就绪:进程已处于准备好运行的状态,即进程已分配到除CPU外的所有必...
    流雨声阅读 282评论 0 2
  • 前言 北大《操作系统原理》[https://www.coursera.org/learn/os-pku]课堂笔记,...
    尤汐Yogy阅读 2,652评论 0 11