《Unix/Linux系统编程》第1,2章学习笔记 20191329马静怡

第1章 引言

  本书是一部研究Unix/Linux系统编程的专著,其中涵盖Unix/Linux的所有基本组件,包括进程管理并发进程定时器和时钟服务文件系统网络编程MySQL数据库系统。本书的目标有:强化学生的编程背景知识、动态数据结构的应用、进程概念和进程管理、并发编程、定时器和定时功能、信号信号处理和进程间通信、文件系统、TCP/IP和网络编程。此外,还简单介绍了Unix的历史和Linux的开发及各种发行版,列出了适合于Linux的各种硬件平台和虚拟机,并展示了如何将Ubuntu Linux同时安装到Microsoft Windows中的VB和VMware虚拟机上。本章还结识了Linux的启动过程,描述了Unix/Linux文件系统组织、文件类型和常用命令,还介绍了用户管理和维护Linux系统需执行的一些系统管理任务。

一、虚拟机上的Linux

VirtualBox

  • 下载VirtualBox
  • 安装VirtualBox
  • 创建VirtualBox虚拟机
  • 将Ubuntu安装到VirtualBox VM上
  • 调整屏幕分辨率
  • 在Ubuntu下测试C语言编程

VMware

  • 在Windows10上安装VMware Player
  • 将Ubuntu安装到VMware虚拟机上

二、使用Linux

  • Linux内核映像
    Linux内核映像位于/boot目录中,一个可启动的Linux内核映像由三部分组成:
    |BOOT|SETUP|linux kernel|
    BOOT是一个512字节的启动程序,但现在不再用于Linux启动,而是包含一些参数。SETUP是一段16位和32位的汇编代码,用于在启动期间将16位模式转换为32位保护模式。
  • Linux启动程序
    最受欢迎的有GRUB和LILO。
  • Linux启动
    1.加载BOOT+SETUP至实模式内存的0x90000处
    2.加载Linux内核至高端内存的1MB处
  • Linux运行级别
    Linux内核以单用户模式启动,以多用户模式运行。
  • 登录进程
  • 命令执行

三、Unix/Linux命令


更多的命令可以在W3Cschool中查看:https://www.w3cschool.cn/unix/unix-useful-commands.html

第二章 编程背景

一、Linux中的文本编辑器及使用

  • vim
  • gedit
  • emacs

二、程序开发

  • 程序开发步骤
    (1)创建源文件:使用文本编辑器创建一个或多个程序源文件。
    (2)用gcc把源文件转换成二进制可执行文件。

问题:GCC的编译过程是怎样的?

gcc命令其实依次执行了四步操作:
1.预处理(Preprocessing)
以“#”号开头的预处理指令如包含#include,宏定义制定#define等。在源程序中这些指令都放在函数之外,而且一般放在源文件的前面。经过预处理之后代码体积会大很多,相当于可执行文件一倍大小。预处理之后的程序还是文本,可以用文本编辑器打开。
2.编译(Compilation)
这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理文件之后的程序转换成特定汇编代码的过程。
3.汇编(Assemble)
汇编过程将上一步的汇编代码转换成机器码,这一步产生的文件叫做目标文件,是二进制格式。
4.链接(Linking)。
链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

  • 静态与动态链接
    使用静态库的静态链接中,链接器将所有必要的库函数代码和数据纳入a.out文件中,这使得它完整且独立,但通常非常大。动态链接使用动态链接库(DLL),也被称为共享库(.so文件),优点是减小a.out文件的大小、许多执行程序可在内存中共享相同的库函数、修改库函数不需要重新编译源文件。
  • 可执行文件格式
    (1)二进制可执行平面文件
    (2)a.out可执行文件
    (3)ELF可执行文件
  • 程序执行过程
    (1)读取a.out文件头,以确定所需的总内存大小。
    (2)sh从总大小中分配一个内存区给执行映像。
    (3)sh放弃放弃旧映像,开始执行新映像。
    (4)执行从crt0.o开始,调用main()。
  • 程序终止
    (1)正常终止
    (2)异常终止

三、C语言的函数调用

  • 32位GCC中的运行时堆栈使用情况
  • long jump
  • 64位GCC中的运行时堆栈使用情况

四、C语言程序与汇编代码的链接

  • 用汇编代码编程
    1.将C代码编译成汇编代码
    2.汇编代码说明
  • 用汇编语言实现函数
  • 从汇编中调用C函数

五、链接库

  • 静态链接库
    链接库中包含预编译的目标代码
  • 动态链接库

六、makefile

make是一号程序,它按顺序读取Makefile或makefile,以自动有选择地执行编译链接。一个make文件由一系列目标项依赖项规则组成。当make程序读取makefile时,它通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项。

七、GDB调试工具

GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。GDB是一个功能强大的调试工具,使用非常简单,但应该注意,所有调试工具只能提供有限的帮助,在某些情况下用处不大,所以程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。

八、C语言结构体

  • 结构体和指针
  • 类型转换
  • 链表
  • 树和二叉树
    以上内容可以在C语言程序设计和数据结构课本中找到详细讲解。
posted @ 2021-09-12 21:41  修勾  阅读(30)  评论(0编辑  收藏  举报