标签存档: Windows

898 查看

操作系统中的几个重要概念

先看一个完整的场景,以下的场景和解释主要解释大致的原理。 Linux 在操作系统运行中运行一个程序,首先,系统会先起一个进程,此时进程会首先处在用户态,运行自己的代码,然后随着程序的不断执行,到了需要通过系统调用使用操作系统内核的阶段,此时进程就要进入内核态。此时有个最主要的事情要做,就是从用户态向内核态传送数据(进程上下文)。然后执行完内核程序,又回到用户态。如果执行完毕,进程进入睡眠状态。 里面涉及几个重要的概念 1、进程:执行一段代码,管理资源,但是线程的话,只是执行代码,不会管理资源。 2、用户态:进程执行用户自己编写的代码时,称为处于用户(运行)态。 3、内核态:当一个进程执行系统调用时,会进入内核代码运行,此时称进程处于内核(运行)态。 4、进程上下文:包含了一系列的进程用到的参数、数据和环境变量(包括了硬件和软件的)。 扩展: 内核空间(栈)和用户空间(栈): 这两种空间在Linux的虚拟空间中,对于32位Linux其寻址能力为(0×00000000~0xFFFFFFFF)其实就是4G的空间。这个大小也决定了32位Linux支持的内存大小,对于64位能支持的内存就大多了(可以自己算)。这里我们假定内存为4G,Linux中会把高位的1G(0xC0000000~0xFFFFFFFF)作为内核空间(栈),余下的3G作为用户空间栈。这里在操作系统的角度看,每个进程都共用了这4G的内存,大家共享资源。对于进程来说,他们看起来是每个都有一个4G的虚拟空间。这里说虚拟空间,是指,实际上是没有这么多的,因为是共享的。所以在使用很多Service程序时,在意其用户态和内核态的资源使用情况也是很重要的。因为过高的话,会影响其他的程序运行,并且这两个态会有短板效应,要兼顾。 地址: 逻辑地址 —-(段表)—> 线性地址 — (页表)—> 物理地址             启用分段时               启用分页时 注意:Linux在2.6时,实现了真正意义上的线程,但针对PHP来说,并没有办法使用线程。这边,为了利于PHP理解,就没有体现线程。 Windows 在操作系统运行中运行一个程序,首先,系统会先起一个进程,此时进程会创建一个主线程,主线程开始执行程序,根据程序的代码,会决定是否创建其他的辅助线程。首先进程处在用户态,然后随着程序的不断执行,到了需要通过系统调用使用内核程序的阶段,同时还会用户态会向内核态传递数据(进程上下文),此时进程就处在内核态。然后执行完内核程序,又回到用户态。如果执行完毕,进程进入睡眠状态。 里面涉及几个重要的概念 1、进程:进行资源管理,创建线程。 2、线程:执行代码片断。 3、用户态:进程执行用户自己编写的代码时,称为处于用户(运行)态。 4、内核态:当一个进程执行系统调用时,会进入内核代码运行,此时称进程处于内核(运行)态。 …

继续阅读 »

无觅相关文章插件,快速提升流量