• 操作系统 进程


    操作系统中同时运行着多个进程,如何管理和调度这些进程,以合理利用系统资源,提高系统吞吐量呢?

    进程是由操作系统内核创建的,每一个进程都分配得有4G的寻址空间(在32位操作系统中,一个指针长度是 4 字节,而 4 字节指针的寻址能力是从 0x00000000~0xFFFFFFFF ,最大值 0xFFFFFFFF 表示的即为4GB 大小的容量,要注意的是这个 4GB 的地址空间是“虚拟”的,并不是真实存在的,而且每个进程只能访问自己虚拟地址空间中的数据,无法访问别的进程中的数据,通过这种方法实现了进程间的地址隔离),该寻址空间是虚拟地址空间,包含用户态(0~3G)和内核态地址空间(3G-4G),应用程序只能执行用户态的代码,只有在要执行系统调用的时候,才会进入内核态,内核态地址空间是所有进程共享的(是操作系统内核运行的地方)。

    用户态中又会包含进程的执行代码,数据,堆(heap)和用户态栈,当程序执行malloc(memory allocation 向系统申请分配指定size个字节的内存空间)的时候,实际上是在虚拟地址空间中申请的(动态内存分配的)。

    CPU在执行代码的时候,并不是直接使用物理地址去物理内存中操作,而是使用虚拟地址。MMU(内存管理单元)接受到cpu发出的虚拟地址后,会首先去内存中进行查表(页表,虚拟内存页到物理内存的映射关系),如果发现当前需要的页已经存在于物理内存中,则直接去操作,如果发现还不在,就会产生缺页异常(中断),中断处理程序就会加载相应的页到物理内存中(LRU页置换算法),并替换出最近最少使用的页回虚拟内存中(虚拟内存通常设置为实际物理内存的1.5~3倍)。

    每个进程都有一个进程控制块(PCB),实际上是一个task_struct结构体,里面维护这各个进程的核心信息,如进程id,运行状态,优先级以及构建进程的资源等。若要详细查看进程,则进入/proc/PID目录,查看maps,smaps,status三个文件的内容。

  • 相关阅读:
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    C语言I博客作业08
    C语言寒假大作战02
  • 原文地址:https://www.cnblogs.com/james111/p/7240032.html
Copyright © 2020-2023  润新知