若干个重要的概念
- 信息本质
- 翻译
- 编译系统
- 存储设备层次结构
寄存器>L1Cache>l2Cache>L3Cache>DRAM>磁盘
- 操作系统管理硬件
概念 硬件
文件 io设备
虚拟存储器 io设备 主存
进程 io设备 主存 处理器
- 虚拟存储器
- 文件
- 进程
- 线程
共享代码和全局变量
- 虚拟存储器
系统之间利用网络通信
程序结构和运行
信息存储
- 16进制
- 字
C声明 | 32位机器 | 64位机器 |
---|---|---|
char | 1 | 1 |
short int | 2 | 2 |
int | 4 | 4 |
char* | 4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
- 数据大小
- 寻址
机器的机器级表示
过程
- 栈帧结构
- 转移控制
- 寄存器使用
- 递归过程
数组分配
- 原则
- 指针运算
- 嵌套数组
- 变长数组
- 定长数组
异质的数据结构
- 结构
- 联合
- 数据对齐
理解指针
GDB调试器
优化程序性能
存储器层级结构
链接
符号表
重定位
可执行目标文件
动态链接共享库
异常控制流
异常
进程
一个经典定义是:一个执行中的程序的实例
内存 |
---|
内核存储空间 |
用户栈 |
↓ |
** |
↑ |
共享库的存储器映射区域 |
↑ |
运行时堆(malloc时创建) |
读/写段 |
只读段 |
** |
进程控制
- 获取进程ID
pid_t getpid(void);pid_t getppid(void);//自己和父进程的pid
- 创建和终止
pid_t fork(void);//父进程创建子进程,父进程呢?父进程在程序运行时就启动了。。。
void exitint(int status);//终止
- 回收子进程
//等待子进程结束(exit())
#include<sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
- 进程休眠
#include<unistd.h>
unsigned int sleep(unsigned int secs);
- 加载 运行
#include<unistd.h>
int execve(const char *filename,const char *argv[],const char *envp[])
- fork 和 execve
信号
操作进程的工具
虚拟存储器
物理寻址 虚拟寻址
地址空间
作用
- 缓存的工具
- 存储器管理
- 存储器保护
地址翻译
存储器映射
动态分配
垃圾收集
I/O
网络编程
客户端-服务端模型
IP
套接字
Web服务器
并发编程
基于进程的并发编程
基于线程的并发编程
- 多线程中的共享变量
- 多线程中的信号量