摘要:
程序执行的过程经历几个阶段:编译---链接---装入内存模块---执行阶段。源程序经过编译后成为目标文件模块,在经过链接库文件等后变成可执行文件。链接的方式有两种:静态链接和动态链接。静态链接指在执行前将所有的目标模块都链接到可执行文件中等待装入执行。动态链接分为装入时动态链接和执行时动态链接。动态链接允许程序不必形成完整的可执行文件,而是生成一个未完成链接的外部模块,等待装入。装入时动态链接指在装入时遇到外部模块连接查找相应的目标模块装入内存,这种方法仍然要将所有的链接模块都装入内存,知识将链接推迟到了装入时。执行时动态链接指在执行时遇到链接部分查找相应的模块装入内存,木有用处的模块将不会装 阅读全文
摘要:
内存的划分分为静态划分和动态划分。都是连续内存存储技术,而非连续内存存储技术有分页、页段式分段。静态划分预先将物理内存划分为固定分区,当新进程装进内存,选择合适的空闲分区分配给进程。又称为固定分区法,分区的长度可以不同。管理分区使用分区使用表,表项的内容是分区编号(线性的)、分区大小、分区使用情况。按照分区大小从小到大方式排列。一种特殊的固定分区法:分页式划分。将内存划分为很小的页框,其中页框远小于上述的分区。两者的区别是:固定分区要求进程存进连续的内存空间,而分页式划分允许进程可以不连续存储在不同的页框。页框的管理使用空闲页框表,将连续空闲的页框集中管理。静态划分的缺点是会产生大量的内零头, 阅读全文
摘要:
操作系统的存储管理包含内存管理和外存管理,外存管理涉及到外设管理,因此这里主要讲内存管理。从所周知,cpu直接从内存中读取置零和数据,而不会与外存进行交互,因此存储在外存的程序和数据(可执行文件)必须装入内存才能够执行,这就是冯.诺依曼存储思想。但是在多道程序操作系统中或者是存在大进程的情况下,物理内存不一定够用,为了扩展内存就发明了虚拟存储技术等扩展技术,将程序的一部存在外存上,等到使用时调入内存即可。扩展技术有覆盖、交换和虚拟存储技术。问题1:多道程序操作系统中,程序的装入时一次性还是先装入一部分然后边执行边装入?若一次行装入内存不足,若边执行边装入效率低下。答1:现在系统多采用虚拟存储管 阅读全文
摘要:
一、分别编译与链接(Linking)大多数高级语言都支持分别编译,程序员可以显式地把程序划分为独立的模块或文件,然后每个独立部分分别编译。在编译之后,由链接器把这些独立的片段(称为编译单元)“粘接到一起”。(想想这样做有什么好处?)在C/C++中,这些独立的编译单元包括obj文件(一般的源程序编译而成)、lib文件(静态链接的函数库)、dll文件(动态链接的函数库)等。静态链接方式:在程序执行之前完成所有的组装工作,生成一个可执行的目标文件(EXE文件)。动态链接方式:在程序已经为了执行被装入内存之后完成链接工作,并且在内存中一般只保留该编译单元的一份拷贝。二、静态链接库与动态链接库先来阐述一 阅读全文