操作系统虚拟内存

虚拟内存

虚拟内存的存在是为了运行比物理内存还大的程序,可以让系统看上去比实际物理空间大小大得多,并为多道程序的执行创造了条件。

明确一个概念:内存中的每一个存储单元都必须有确切的地址,而例如对32位机来说,能发出的地址数目就是2^32=4G,这也被称为处理器的寻址能力。因此机器内存的大小也应该是和处理器的最大寻址能力对应的。

但现实往往不是这样的,导致了大量寻址能力的浪费。但我们可以明确一点:程序总是被逐断运行的,一段时间内会稳定运行在某一段程序中。

因此一种做法是:把要运行的那一段程序从辅存(磁盘等外部存储设备)中复制出来,其余仍然留在辅存。当要运行下一段程序时,就把内存中的上一段程序换回到磁盘中。这也就让内存看起来变大了,这个存储空间也被叫做虚拟内存空间。这个虚拟内存空间是右寻址能力决定的。

这也就是说,一个程序被执行,需要执行两次映射,第一次映射到虚拟内存,第二次映射到物理内存。负责这个任务的硬件部分被称为存储管理单元(MMU),软件部分被称为内存管理模块。

内存管理模块记录着一个虚拟地址/物理地址映射表,作为MMU转换的依据。

阅读更多

操作系统知识点

并发和并行

并发:宏观上两个程序在同时运行,实际上是交织运行的,单个周期只运行了一个指令,用于提高效率。
并行:物理意义上的同时运行,如多核cpu,运行在不同的核上,互不影响。

进程和线程的概念,区别,使用场景

进程:资源分配的基本单位,实现了操作系统的并发。
线程:线程是进程的子任务,是CPU调度的基本单位,不拥有资源,但可以使用进程所属的资源。每个进程都有一个主线程,实际上是主线程来执行main函数中的代码。

进程在创建,撤销,切换时的开销都显著大于线程,系统要为之分配,回收,切换资源。

一个线程只属于一个进程,进程间不会相互影响,一个线程挂掉将影响整个进程挂掉。

线程并不是越多越好,每个线程都需要一个独立的堆栈空间,线程之间的切换需要保存很多中间状态,耗费程序运行时间。多线程开销远远小于多进程。

进程在同一时间只能干一件事,进程在执行过程中如果阻塞,整个进程就会挂起,然后其中有些工作并不依赖阻塞的资源,却还是卡在那里。因此引入线程,减少程序在并发时付出的时空开销。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×