南京大学《操做系统》笔记(一)

2021年11月20日 阅读数:3
这篇文章主要向大家介绍南京大学《操做系统》笔记(一),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

ELF文件

ELF(Executable and Linkable Format, 可执行与可连接文件)是一种为可执行文件、目标文件、共享连接库和内存转储(core dump)准备的标准文件格式。
一个ELF文件由如下三个部分组成:linux

  • ELF头:描述文件的主要特性:类型、CPU架构、入口地址,现有部分的大小和偏移等;
  • 程序头表:列举了全部有效的段(segment)和它们的属性,程序头表须要加载器将文件中的节加载到虚拟内存段中;
  • 节头表:包含对节(section)的描述。

程序在linux系统中的执行步骤

  1. 被操做系统加载
    经过父进程的execve
  2. 不断执行系统调用
    在程序内部,对库函数的使用会去调用操做系统的系统调用
    进程管理:fork、execve、exit等
    文件/设备管理:open、close、read、write
    存储管理:mmap、brk
  3. 退出(exit)
    ——任何一个复杂的应用程序在操做系统中的执行都是按照上述步骤。

gcc的执行步骤

一个.c文件,通过预处理变成.i文件,编译变成.s文件,汇编变成.o文件,连接变成.out文件。架构

  1. cc1-编译器
  2. as-汇编器
  3. collect2-收集器(收集构造和析构函数的信息, 合成call_constructors和call_destructors来调用构造和析构函数)
  4. ld-连接
    collect2是ld连接器的一个封装,gcc经过调用collect2调用ld来完成连接工做。collect2主要实现了两个额外的功能:生成代码调用全局静态对象的构造函数和析构函数;支持Cfront的方式生成模板代码。