随笔分类 -  操作系统

摘要:进程状态以及状态转换 进程并非总是处于运行中,例如CPU没运行在它身上时它就是非运行的。进程在创建之后会改变状态,不同的状态之间可以实现状态切换,可以通过ps或top等命令捕获进程的状态。包含以下几种状态: 创建态(new):进程正在被创建中,过程非常短暂,用户无法捕捉 运行态(running):进 阅读全文
posted @ 2020-03-04 19:53 星火撩原 阅读(1558) 评论(0) 推荐(0) 编辑
摘要:进程基础 程序和进程 什么是程序?什么是进程?程序和进程之间的关系?相信在任何介绍进程基础的地方都会解释一下程序和进程之间的关系,这是一个常识性的知识。 单独来看程序和进程,它们的概念都非常的简单。粗略去看,程序是一个或多个文件,进程是操作系统上能做某些事情的东西。 更标准一点,程序是由编程人员编码 阅读全文
posted @ 2020-03-04 19:52 星火撩原 阅读(694) 评论(0) 推荐(0) 编辑
摘要:锁 计算机领域中,锁机制使用的非常多。它主要是为了避免多个进程访问同一资源时,可能出现的数据不一致问题。 例如,cat命令输出一个比较大的文件内容,cat命令的特性是需要先将所有磁盘文件数据读取到内存后再输出,所以cat输出一个大文件可能需要花费一些时间。如果在cat在加载文件时,在另一个终端上向这 阅读全文
posted @ 2020-03-04 19:48 星火撩原 阅读(392) 评论(0) 推荐(0) 编辑
摘要:信号量 信号量(Semaphore)也称为信号灯,典故来源于荷兰:火车根据旗标来决定是否通行。其实就是红绿灯的作用。如图。 通过红绿灯理解信号和信号量,感觉它们似乎是一样的。但是,信号量机制是根据红绿灯的事件让人等待(进程阻塞)或不等待(进程继续运行),只有这两种行为;而信号机制是根据红绿灯事件做出 阅读全文
posted @ 2020-03-04 19:43 星火撩原 阅读(291) 评论(0) 推荐(0) 编辑
摘要:消息队列 消息队列(Message Queue)用于在进程之间传递较小的数据,进程可以向一个或多个消息队列中放入数据(消息),其它进程可以从消息队列中按照各种方式(例如最典型的先进先出FIFO方式)取出消息,从而实现进程间通信。 消息队列是一种生产者消费者模型,生产者生产消息放入队列,等待被消费者消 阅读全文
posted @ 2020-03-04 19:37 星火撩原 阅读(292) 评论(0) 推荐(0) 编辑
摘要:文件映射(Memory-mapped file)是将磁盘上文件的某段数据映射到内核的一段物理内存上,然后将此物理内存映射到一个或多个进程的虚拟内存中。映射了文件的进程可以直接读、写这段内存来达到读、写磁盘文件的功能。如果多个进程请求映射的文件区段相同,则只映射一次。 所以,文件映射进行了两次映射,一 阅读全文
posted @ 2020-03-04 19:31 星火撩原 阅读(428) 评论(0) 推荐(0) 编辑
摘要:套接字 套接字(Socket)用于协调不同计算机上的进程间通信,也就是基于网络的通信。当然,也可以在本机上使用套接字进行进程间的通信。 套接字通信的方式非常多,有Unix域套接字、TCP套接字、UDP套接字、链路层套接字等等。但最常用的肯定是TCP套接字。所以,这里介绍下TCP Socket通信方式 阅读全文
posted @ 2020-03-04 19:27 星火撩原 阅读(804) 评论(0) 推荐(0) 编辑
摘要:管道 管道是操作系统提供的一种最基本的进程间通信方式。每创建一个管道,就有两个文件描述符,一个是负责读管道的,一个是负责写管道的。所以,使用管道通信时,可以看作是两个文件描述符加一段内核空间中的内存,如图。 管道只能协调有亲缘关系的进程间通信,所谓亲缘,比如父子进程、兄弟进程。当某进程创建一个管道后 阅读全文
posted @ 2020-03-04 19:26 星火撩原 阅读(287) 评论(0) 推荐(0) 编辑
摘要:进程间通信 单机操作系统上的进程可以分为两类: 1.独立进程:这类进程不会和其它进程有任何交流。 2.协作进程:两个或多个进程之间需要交流。 例如,ls /tmp命令是独立运行的,不依赖于其它进程,而cat a.log | grep 'abc'命令中的两个进程是协作进程,grep进程依赖于cat进程 阅读全文
posted @ 2020-03-03 21:16 星火撩原 阅读(132) 评论(0) 推荐(0) 编辑
摘要:I/O操作和DMA、RDMA 用户进程想要执行IO操作时(例如想要读磁盘数据、向磁盘写数据、读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对应的系统调用请求操作系统帮忙完成这些操作。这里因为系统调用产生中断将陷入到内核,进行一次上下文切换操作。 内核进程帮忙 阅读全文
posted @ 2020-03-03 21:15 星火撩原 阅读(1275) 评论(0) 推荐(0) 编辑
摘要:两个缓冲空间:kernel buffer和io buffer 先看一张图,稍后将围绕这张图展开描述。图中的fd table、open file table以及两个inode table都可以不用理解,只需要知道它们体现出来的文件描述符和磁盘文件之间的对应关系:文件描述符fd(例如图中的fd=3)是对 阅读全文
posted @ 2020-03-03 21:09 星火撩原 阅读(614) 评论(0) 推荐(0) 编辑
摘要:OOM和swap分区 进程的虚拟内存空间是映射到整个物理内存空间的,所以在进程自身看来它拥有了整个物理内存,它也能使用整个物理内存,只需在使用的时候请求操作系统帮忙分配更多空间即可。 但是,操作系统上并非只运行了一个进程,如果一个进程无休止的申请物理内存空间,最终会导致物理内存耗尽或即将耗尽,使得操 阅读全文
posted @ 2020-03-03 21:02 星火撩原 阅读(697) 评论(0) 推荐(0) 编辑
摘要:页翻译:快速地址转换 虽然操作系统通过页表也能将虚拟页翻译成内存中对应的页帧,但是它仍然很慢。另一方面,如果访问每个页都需要操作系统来参与帮忙翻译,这会频繁陷入内核,效率是非常低的。所以,这里再次将任务交给硬件CPU去做。 提示:操作系统将底层任务交给硬件提高效率 前文介绍段的虚拟地址翻译,以及这里 阅读全文
posted @ 2020-03-03 20:56 星火撩原 阅读(288) 评论(0) 推荐(0) 编辑
摘要:分页和页表 除了分段,空间管理的第二种常见方式是分页。 Linux将虚拟内存划分成固定大小的页(Linux中的页大小是4KB),并且以页作为操作内存的最小单元。例如一次性读取一页,虚拟内存中的页称为虚拟页。对应的,物理内存也会划分成固定大小的页来管理,称为物理页,也常称为页框或页帧(page fra 阅读全文
posted @ 2020-03-03 20:48 星火撩原 阅读(914) 评论(0) 推荐(0) 编辑
摘要:栈空间:用户栈和内核栈 程序的执行流程 进程其实都是在执行任务,而任务其实就是函数定义的(函数也称为方法、子程序等,本质都一样),所以进程的作用就是不断的执行函数。程序启动时,第一个要执行的函数是main()函数(有些语言隐藏了这个函数,但任何程序一定会有一个程序入口函数),然后在main()函数中 阅读全文
posted @ 2020-03-03 20:41 星火撩原 阅读(1304) 评论(0) 推荐(1) 编辑
摘要:进程的地址空间布局:分段 Linux的虚拟地址空间采用“分段+分页”结合的方式实现。先看分段,之后再介绍分页。 分段是将内存划分成各个段落(Segment),每个段落的长度可以不同,且虚拟地址空间中未使用的空间不会映射到物理内存中,所以操作系统不会为这段空间分配物理内存。这样的话,内核为刚创建的进程 阅读全文
posted @ 2020-03-03 20:36 星火撩原 阅读(733) 评论(0) 推荐(0) 编辑
摘要:资源隔离:虚拟内存 前面描述的所有操作系统基础知识都是进程和CPU资源相关的内容,另一个操作系统中和进程相关的比较重要的话题是内存资源。 操作系统主要目的是执行程序,而程序在执行时,程序自身以及程序所访问的数据、所产生的数据都在内存里(至少所有数据的流向都会经过内存)。此外,现代操作系统可以同时运行 阅读全文
posted @ 2020-03-03 20:33 星火撩原 阅读(259) 评论(0) 推荐(0) 编辑
摘要:CPU的归属:Idle进程 操作系统并不总是繁忙。例如个人PC上任务比较轻,多数时候都无法充分利用CPU,导致CPU处于空闲状态。但CPU既然通电了,它就得运行,那么在它没有任务需要执行的时候,CPU在干嘛呢? 操作系统提供了一个称为idle的进程(也可能idle处于某个永不退出的内核式进程内,而不 阅读全文
posted @ 2020-03-03 20:31 星火撩原 阅读(859) 评论(0) 推荐(0) 编辑
摘要:操作系统的服务端口:系统调用 用户进程工作在用户态,它是受限的,很多涉及到硬件的操作都无法执行,但是它们又想要取得结果,就只能请求工作在内核态的操作系统帮助完成这些操作,并将操作结果交给用户进程。 系统调用(system call)就是操作系统提供给用户进程请求操作系统做一些特权操作的接口,即为用户 阅读全文
posted @ 2020-03-03 20:27 星火撩原 阅读(245) 评论(0) 推荐(0) 编辑
摘要:要想在任何需要的时候回到操作系统,这相当于是改变了CPU的正常执行流程,所以一个非常熟悉的字眼——中断(Interrupt)就出现了。通过中断,可以保证回到操作系统,从而将CPU的控制权交给操作系统。 中断的字面意思就是打断正常执行流程,但是注意,它表示的是打断流程而不是终止流程,这是不同的概念。中 阅读全文
posted @ 2020-03-03 20:19 星火撩原 阅读(455) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示