链接、装载与库
文章平均质量分 88
沈子恒
计算机视觉 自然语言处理 推荐系统 架构设计
展开
-
写在开篇的话
简介该系列文章主要为了学习系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台。重点了解一个应用程序在编译、链接和运行时刻所发生的各种事项。这主要包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被转载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。原创 2016-06-28 23:10:01 · 639 阅读 · 0 评论 -
[OS复习]文件管理
1.复习要点提要文件管理系统、文件的基本概念操作、文件目录、文件的逻辑组织与访问、文件记录与数据块的关系、文件共享、文件存储空间与空闲空间的管理预先提出的问题:什么是文件?文件由什么组成?文件如何命名?如何保证文件数据的安全?对文件可以进行哪些操作?文件在磁盘上如何存储?磁盘的空白存储区如何管理 ?2.文件系统概述2.1文件系统的功能有效地管原创 2016-08-24 22:58:57 · 1063 阅读 · 0 评论 -
[OS复习]存储管理2
内存划分与分配技术1.内存划分静态划分:划分预先进行,创建新进程时,在内存中找到一个合适的分区分配给它。动态划分:系统初始化时,可以将整个内存的用户区看作一个分区。创建新进程时,根据进程申请的空间大小,在这个分区中动态地为之划分一部分空间。1.1静态划分必须事先进行,一旦划分完毕,分区的大小和数目将不再改变。可以划分:大小相同/不同的分区,如固定分区和分页。固定分区原创 2016-08-12 21:53:29 · 1108 阅读 · 0 评论 -
[OS复习]程序装入技术、简单存储管理技术
1.可执行程序的生成步骤如何装入待执行的程序及其所需的数据?何时将程序的逻辑地址转换为物理地址?3种装入方式:绝对装入、重定位装入和运行时动态装入。 1.1绝对装入程序运行之前,按照程序的逻辑地址,将程序和数据装入内存指定的地方。实现简单,无须进行逻辑地址到物理地址的变换。缺点:程序每次必须装入同一内存区;程序员必须事先了解内存的使用情况,根原创 2016-08-13 21:45:03 · 2993 阅读 · 0 评论 -
[OS复习]文件管理2
1.文件目录 1.1文件目录的内容 基本信息:文件名、文件类型、文件组织等;地址信息:卷(存储文件的设备)、起始地址,(起始物理地址)、文件长度(以字节、字或块为单位)等。访问控制信息:文件所有者、访问信息(用户名和口令等)、合法操作等;使用信息:创建时间、创建者身份、当前状态、最近修改时间、最近访问时间等。1.2目录内容的组织方式及分析目录项:全部目录内容原创 2016-08-25 22:04:44 · 1415 阅读 · 0 评论 -
[OS复习]虚拟存储管理技术2
1.虚拟存储系统的软件策略现代操作系统几乎都采用虚拟存储管理系统。一些特殊的操作系统和一些较老的操作系统没有采用虚拟存储技术。例如,MS DOS和早期的UNIX操作系统等。大多采用分段与分页相结合的段页式管理系统。下面以分页存储管理为例,介绍虚拟存储系统采用的软件策略。主要从以下几个方面进行分析:驻留集管理(Resident Set Management)放置策略(Placem原创 2016-08-14 22:28:54 · 2762 阅读 · 0 评论 -
三探·模块拼装思想(静态链接)
程序设计的模块化是程序员一直追求的目标,因为当一个系统非常复杂的时候,我们就不得不把一个复杂的系统逐步分割成晓得系统以达到各个突破的目的。一个复杂软件的开发过程也如此;首先把每个源代码模块独立地编译,然后按照需要将他们“组装”起来,这个组装过的过程就是我们通常说的链接的过程。链接的主要内容就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接器所做的工作和程序员“原创 2016-09-23 14:48:36 · 719 阅读 · 0 评论 -
一探·编译与连接
1.前言对于平常应用程序的开发,我们很少需要关注编译与链接过程,因为通常的开发环境都是流行的集成开发环境,比如Visual Studio、Delphi等。他们往往将编译与链接的过程放在了一起,称为构建(Build)。IDE和编译器提供的默认配置、编译、链接参数对于大部分的应用程序开发而言应经足够使用了。但只在这样的开发过程我们往往会被这些复杂的集成工具所提供的强大功能所迷惑,很多系原创 2016-09-21 20:52:28 · 543 阅读 · 0 评论 -
目标文件里面到底有什么(1)?
目标文件是指:编译器编译源代码后生成的文件,那么目标文件里面到底存放的是什么呢?或者说我们的源代码在经过编译以后是怎么样存储的呢?目标文件从结构上将,它是已经编译后的可执行文件格式,只是好没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实,目标文件本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。可执行文件格式涵盖了程序的编译、链接、装载和执行的各个方原创 2016-09-25 13:13:50 · 4066 阅读 · 0 评论 -
二探·编译与连接
直观上来说,编译器就是将高级语言翻译成机器语言的一种工具。因为使用机器指令或汇编语言编写程序是一件十分费事,并且相当乏味的一件事。这使得程序开发效率变得相当低下。此外,使用机器语言或汇编语言编写的程序十分依赖特定的机器,一个为某种CPU编写的程序在另外一种CPU下完全无法运行。所以研究人员期盼这样一种语言,我们可以采用类似于自然语言的语言来描述一个程序。高级语言由此诞生,它能使得程序员更加关注程序原创 2016-09-22 16:28:58 · 561 阅读 · 0 评论 -
目标文件里面到底有什么(2)?
真正了不起的程序员对自己的程序的每一个字节都了如指掌!前面对于目标文件只是做了概念上的阐述,如果不彻底深入目标文件的具体细节,这样的分析就是泛泛而谈没有意义,也没有深入的理解。就象知道TCP/IP协议是基于包的结构,但是从来没有看到过包的结构是什么样的(说得好像就是我),包的头部有哪些内容?目标地址和源地址是怎样存放的?如果不能细致且深入的去了解,就会步入一个误区:很多问题其实在表面上看似原创 2016-10-02 11:01:03 · 1131 阅读 · 0 评论 -
静态链接中的那点事儿(1)
作为一个程序员或者说C++程序开发人员,想必对ELF目标文件从整体轮廓到某些局部的细节都非常熟知。该系列帖子主要为了解决一个疑惑:当我们有多个目标文件时,如何将它们连接起来形成一个可执行文件?这个过程发生了什么?其实,读到这里,可能就了解到,这其实就是链接的核心内容:静态链接。1.应用到的两个源代码文件/* a.c */extern int shared;int main()原创 2016-10-05 11:07:51 · 894 阅读 · 0 评论 -
[OS复习]存储管理1
1.概述A.外存分为磁盘、光盘等;外存的管理放在外设的管理中B.外存可以保存文件数据等,要运行外存的数据必须将其装入到内存中(也可以成为调入内存)C.整个内存空间可以分为操作系统自用的空间与用户空间,创建进程主要发生在用户内存空间2.存储管理的任务2.1存储分配基本任务:管理内存空间的分配与回收;包括分配基本内存空间、增加新的内存空间(动态申请或原创 2016-08-08 20:28:07 · 791 阅读 · 0 评论 -
[OS复习]进程互斥与同步1
进程互斥与同步1.引言:多道程序设计存在的问题?采用多道程序设计技术的操作系统,允许多个进程同时驻留内存并发执行。思考:A.如何协调多个进程对系统资源,如内存空间、外部设备等的竞争和共享?B.如何解决多个进程因为竞争资源而出现执行结果异常,甚至导致系统不稳定、失效等问题?例如,多个进程同时申请文件打印,如何有效分配打印机? 1.1 临界资源访问实例1:银行的联网储蓄原创 2016-08-03 10:47:49 · 2370 阅读 · 0 评论 -
[OS复习]操作系统综述2
1.操作系统的功能操作系统的主要任务:(1)管理处理机(2)存储器管理(内存)(3)管理输入/输出设备(外设)(4)管理数据文件(文件)(5)提供接口服务1.1 接口功能:指操作系统为用户提供的人机交互界面(1)命令行:DOS、Unix;对于初学者很难入门(2)图形化户用接口:Windows,懂不懂英语不重要,只要认识图标就好了(3)程序接口:基于系统调原创 2016-07-26 22:38:45 · 838 阅读 · 0 评论 -
[OS复习]进程互斥与同步2
互斥与同步的解决策略当前,利用软件方法、硬件方法、信号量方法、管程方法、消息传递方法都可以有效地解决进程间的互斥与同步,其中信号量的方法更具有优势(目前已经通用)。1. 软件方法:软件方法是指由进程自己,通过执行相应的程序指令,实现与别的进程的同步与互斥,无须专门的程序设计语言或操作系统的支持。实践证明,该方法很难正确控制进程间的同步与互斥,而且可能会大大地增加系统的额外开销。原创 2016-08-04 00:13:54 · 1455 阅读 · 0 评论 -
[OS复习]操作系统综述1
1.计算机系统资源软件:系统软件(操作系统及应用程序)、应用软件硬件:处理机(CPU)、内存(条)、外部I/O设备(显示器、键盘、鼠标、打印机、磁盘、磁带、扫描仪……)以及系统总线2.什么是操作系统?#用户环境观点:该观点认为,操作系统是计算机用户使用计算机系统的接口,它为计算机用户提供了方便的工作环境。计算机用户通常是指终端的用户、程序员以及系统设计者。操作系统提供的接口原创 2016-07-25 22:17:39 · 1167 阅读 · 0 评论 -
[OS复习]进程管理2
问题:多个进程竞争内存资源1.解决方法方案一:采用交换技术,换出一部分进程到外存,以腾出内存空间方案二:采用虚拟存储技术,每个进程只能装入一部分程序和数据(存储管理部分)2.对换技术(交换技术,swapping)将内存中暂时不能运行的进程,或暂时不用的数据和程序,换出到外存,以腾出足够的内存空间,把已具备运行条件的进程,或进程所需要的数据和程序,换入内存。PCB不能换出去(原创 2016-07-31 22:04:44 · 1124 阅读 · 0 评论 -
[OS复习]进程管理3
进程调度方式及类型1.进程调度方式根据执行进程的处理机是由进程自己释放,还是被强行剥夺,可以将进程调度方式分为非剥夺方式和剥夺方式两种。1.1非剥夺方式执行进程只有在执行完毕,或因申请I/O阻塞自己时,才中断其执行,释放处理机,调度新的进程执行。这种方式不利于“即时性”要求较高的分时和实时系统,主要用于批处理系统。(不能强行剥夺)1.2剥夺方式操作系原创 2016-08-01 12:40:45 · 570 阅读 · 0 评论 -
[OS复习]进程管理4
进程调度算法(Short-Term)1.先来先服务(FCFS)该方法按照进程到达的先后顺序排队,每次调度队首的进程(就像超市中购物付款一样)。FCFS算法属于非剥夺调度方式,实现简单,看似公平。但是对于那些后进入队列而运行时间较短的进程,或I/O型的进程而言,可能需要长时间等待(对短进程以及I/O型进程不公平)。1.1 幼儿园小孩喂食问题如果采用FCFS方法,让全部小孩原创 2016-08-01 14:22:40 · 5924 阅读 · 0 评论 -
[OS复习]设备管理1
1.设备管理概述设备管理的主要功能包括:设备分配、设备映射、设备驱动、I/O缓冲区管理1.1设备分配多道程序系统中的设备不允许用户直接使用,而是由操作系统统一调度和控制。设备分配功能是设备管理的基本任务。设备分配程序按照一定的策略,为申请设备的用户进程分配设备,记录设备的使用情况 1.2设备映射为了提高应用软件对运行平台的适应能力,方便实现应用软件I/O原创 2016-08-16 21:12:40 · 1675 阅读 · 0 评论 -
[OS复习]设备管理2
1.I/O缓冲技术 1.1缓冲技术的引入缓解处理机与设备间速度不匹配的矛盾;实现设备与处理机一定程度的并行操作;减少设备的中断频率,放宽对中断响应时间的限制。1.2提前读与延后写指用户进程从 I/O缓冲区中取走前一个数据以后,立即发出对下一个数据的输入请求。操作系统将在适当的时候响应该请求以便把用户进程需要的下一个数据从用户进程指定的输入设备读入到I/O 缓冲区中。显然,用原创 2016-08-16 22:06:43 · 805 阅读 · 0 评论 -
[OS复习]设备管理3
1.磁盘设备的管理原创 2016-08-17 16:24:03 · 1304 阅读 · 0 评论 -
[OS复习]设备管理4
1.引入磁盘调度的例子假定:一个硬盘的扇区长度为512个字节,磁道长度为32个扇区,平均寻道时间为20ms,传输速率为1MB/s,转速为3600rpm。显然, 如果一个长度为128K个字节的文件存放在该硬盘上,那么该文件将在该硬盘上占用256个扇区。问:如果系统从该硬盘上完整地读入该文件, 将花费多长时间?A.若文件连续地存放在硬盘的8个相邻的磁道上,那么系统完整地读入该文件需原创 2016-08-17 18:24:31 · 2522 阅读 · 1 评论 -
[OS复习]进程管理5
线程1.多线程操作系统中引入进程的目的:为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量。操作系统引入线程的目的:这是为了减少程序并发执行时系统所付出的额外开销(减少管理进程以及切换进程的时间花销),使操作系统具有更好的并发性。进程的两个基本属性:(1)进程是一个拥有资源的独立单位;(2)进程同时又是一个可以独立调度的基本单位。1.1原创 2016-08-02 22:29:15 · 1249 阅读 · 0 评论 -
静态链接中的那点事儿(2):C++二进制兼容性及跨平台初步
C++的一些语言特性使之必须由编译器和链接器共同支持才能完成工作。最主要的有两个方面,其一,C++的重复代码的消除;其二,全局构造与析构。此外,由于C++的各种特性,比如虚函数、函数重载、继承、异常等,使得C++背后的数据结构异常复杂。而且最为不幸的是,这些数据结构往往在不同的编译器和链接器之间不能相互通用,使得C++程序的二进制兼容性成为一个难题。本篇博客将结合项目经验初步讨论C++程序的二进制原创 2016-10-05 17:22:31 · 1759 阅读 · 0 评论