Linux系统编程------知识体系
一.知识点梳理
1.Linux操作系统基础概念
1.1 Linux是什么?
Linux通俗的讲是一种操作系统,但其实是系统的内核,是上层内容和基础内容相互交流的桥梁
1.2 基于Linux内核发布的版本
- Redhat系列
CentOS (RHEL的社区克隆版本,免费版本,稳定性非常好,适合服务器使用)
Fedora Core (由原来的Redhat桌面版本发展而来,免费版本,稳定性较差,最好只用于桌面应用)
RHEL (Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本,稳定性非常好,适合服务器使用)
- Debian 系列
Debian
Ubuntu
- FreeBSD
- Android
1.3 最基础的Linux操作系统
- Linux内核
- shell
- 标准库
基础软件包含了:gcc、g++、gdb、glibc
2.Linux内核的子系统
2.1 进程管理子系统
2.1.1 什么是进程?
进程就是当程序被操作系统装载到内存并分配给它一定资源时。
进程是操作系统分配资源的最小单位
程序是代码和数据的集合性的静态概念,而进程是程序一次执行的实体,是一个动态概念。
2.1.2 进程是如何运行的?
- 读取文件
系统按照文件资源进行分配内存,生成并调用栈,按照调用栈执行
- 二进制文件
ELF可执行与可链接格式 :.o目标文件、可执行文件、静态库、动态库
目标文件与可重定位文件
可执行文件:文件段构成:
- 内核识别二进制文件
内核有一个加载二进制文件的结构体:struct linux_binfmt
2.1.2 内核当中如何标记进程?
- PCB中生成空间存放进程信息:
1.PID:进程号
2.state:进程状态
3.Thread_info:线程信息
4.mm:mm_struct:内存描述符的指针
5.tty:tty_struct:运行终端描述
6.fs:fs_struct:文件系统、当前程序的运行环境
7.signal:signal_struct:信号描述
8…
- 进程会占用和消耗哪些资源?
内存、CPU、硬件设备
- 进程都有哪些状态
D:不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生
R:正在运行或者可运行(在运行队列排队中)
S:可中断睡眠(休眠中、受阻、在等待某个条件形成或者接受到信号)
T:已经停止的进程,收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止运行
X:死进程
Z:僵尸进程
<:高优先级
N:低优先级
L:页面锁定在内存
s:一个信息头
l:多线程
+:在前台进程组
2.2 内存管理子系统
- 有关介绍可以查看该链接Linux 内存管理
2.3 文件管理子系统
2.3.1 Linux下一切皆文件
Linux操作系统下,所有组件都是通过文件形成的
2.3.2 文件的常用系统调用
- open
- read
- write
- lseek
- ioctl
- close
2.3.3文件描述符
内核在进程打开的时候,会用一个不大于1024的整数来记录文件的位置,相当于一个索引
对于标准输出的列子:标准输入0,标准输出1,标准错误2
2.3.4 文件类型
- ‘-’:表示普通文件
- d:为目录文件
- c:字符设备文件
- b:块设备文件
- p:管道文件
- l:链接文件
- s:socket文件
2.4 设备管理子系统
2.5 网络管理子系统
3.计算机系统
3.1 内核
3.2 上层应用软件
3.3 架构
- 应用层
获取数值,进行计算处理并且返回结果
- 内核
从内存当中获取值,拿到处理结果
- CPU
将进行的 操作者存到对应的内存当中
- 硬件接口
- 硬件
鼠标、键盘、显示器等等
二. 重难点总结
1.文件节都是由哪些结构组成的?
ELF Header:标记ELF的头部
.text:存放已经编译好的可执行的代码
.data:已经初始化好的全局变量
.rodata:只读数据、const的变量、字符串常量
.bss:未初始化的全局变量,运行时会 置为0
.symtab:符号表、记录函数和变量
.strtab:字符串表,字符串常量和变量名
.rel.text:引用到其他文件的函数
rel.data:引用到其他文件的全局变量
section header table:记录上述节位置的表
三.自我总结
主要熟悉和学习了Linux系统的组成和一些关于文件子系统上细节的知识,尽管有很多并不能看懂,但是先存到自己的脑海里面,也许编程这条路上走着走着就明白了。