进程的加载过程
来源:互联网 发布:免费货代软件 编辑:程序博客网 时间:2024/06/01 09:27
假如有一个可执行程序,它有自己的大小。将可执行程序加载到内存空间有各种方法,以下是我们便于理解的一种方法。
如上图,如果想再加载一个程序进去,理论上空间够用,但实际上放不进去,因此这种管理方案浪费的内存较大,会产生外部碎片。
因此我们可以使用页表来对内存进行管理,下图是使用页表的方法。
页表:操作系统会为每一个进程维护一个页表,页表主要记录其加载时每个块对应的页号。
分页的特点:不要求所有的块连续,可以避免外部碎片,但是会产生内部碎片。
由上图,分页将物理内存上的空间划分为很小的区块,这个区块成为页。内存上的程序使用完后释放,再循环使用,可以提高空间使用率。
假如上图的内存有20个区块,可执行程序有5个区块,则内存可以加载20/5=4个程序,此时内存就已经使用完了。当内存空间不够用的时候,就使用虚拟内存。
虚拟内存:
概念:虚拟内存是在磁盘空间开辟空间作为内存的一个补充。
进程可以一部分驻留在内存上,而其他部分存储在虚拟内存上。
虚拟内存的优点:
1、操作系统同时执行的进程数量会大幅提升。
2、操作系统可以执行比内存空间大的多的进程。
接下来详细描述一下进程的加载过程:
当一个程序加载到内存时,刚开始只加载0号块,剩下的块暂时不会访问到,不用加载到内存,放在虚拟内存上就可以。因此上图内存可以同时加载20块,即20个程序。假如系统有3G的内存,第一个进程只占4k,其他剩余的3G-4k的内存可以加载其他程序。
但是当去内存访问0号块完毕时,如果要访问1号块,但此时1号块不在内存上而在虚拟内存上,此时就会发生页中断(页错误)。此时CPU无法执行,中断处理程序会扫描虚拟内存,然后找到1号块所在的虚拟内存的空间,将其加载到内存,CPU再次扫描,程序正常执行。
使用虚拟内存这种管理方式的缺点是浪费时间,中断处理程序执行时,CPU需要等待,会浪费时间。
接下来讲一个名词,叫做系统抖动
系统抖动概念:在请求分页存储管理中,从内存刚刚换出某一页面后,根据请求又马上换入该页,这种反复换入换出的现象,叫系统抖动,或系统颠簸。
系统抖动是因为页错误太多,频繁出现页中断,浪费CPU大部分时间。
为了降低系统抖动,降低页错误次数,就要使用页面置换算法(FIFO),原则是先进先出,但这种算法只是在按顺序访问地址空间时是理想的。因此我们可以使用另一种算法,即最近最久未使用算法(LRU),它是置换最近过去一段时间最久未使用的页面。
- 进程的加载过程
- 进程内存加载过程
- 关于fork&exec之进程的创建和可执行程序的加载过程
- ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)
- Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
- 进程的创建过程
- fork进程的过程
- 进程的执行过程
- 进程的创建过程
- 类的加载过程
- webkit的加载过程
- JDBC加载的过程
- 浏览器的加载过程
- 类的加载过程
- 加载声音的过程
- 加载声音的过程!
- 类的加载过程
- 类的加载过程
- Xamarin.Forms 用户界面
- anaconda设置清华园
- Nutch+MySQL集成笔记
- 面向对象的三大特征
- git的命令行使用
- 进程的加载过程
- 数据库表结构的修改与操作
- PAT刷题:1012. The Best Rank (25)
- sql-server数据库基础知识五(用户、角色、权限)
- C# 调用showDialog后需要Dispose
- 全面解析JavaScript里的循环方法之forEach,for-in,for-of
- i.MX6Q的qnx调试笔记-qnx的IPL源码分析代码流程分析
- C++实现数组构造的线性表
- Binary Search:287. Find the Duplicate Number