基本概念和原理
程序和进程
程序:磁盘上编译好的二进制文件 不占用系统资源
进程:程序运行 产生进程 内存中执行的活跃程序 占用系统资源
并发:同一时间间隔 多个事件交替 (时间片)
并行:同一时刻多个事件
单道程序设计模式 多道程序设计模式
CPU和MMU


虚拟地址:可用的地址空间有4G 即使物理硬件内存只有512M
程序中使用的永远是虚拟地址
MMU:虚拟内存和物理内存映射、 设置修改内存访问级别
Windows 3 2 1 0 ; Linux 3 0
32位机 1页-4K MMU划分的最小单位
相同程序产生的进程映射的物理内存不共享
共用同一内核空间 但是PCB依然不一样
PCB:Linux下是tack_struct结构体
部分成员:id、状态、切换时需要保存恢复的寄存器、
虚拟地址空间的信息(表)、控制终端的信息
当前工作目录、umask掩码(权限)、文件描述符表
和信号相关的信息、用户id和组id、会话session和进程组
进程可以使用的资源上限(ulimit -a)
进程状态
环境变量
运行环境参数 字符串
统一存储格式
描述进程环境信息
Linux—多用户(同一账号同时多人登录)多任务
常见环境变量:目录之间用冒号分隔 NULL哨兵结尾
PATH SHELL HOME LANG TREM
引入环境变量表:extern char** environ;
function:
stdlib.h
char getenv(const char name); // return value
int setenv(const char name,const char value,int overwrite);//change or add, if fail return -1
int unsetenv(const char* name);//delete if fail return -1 删除不存在的环境变量不会fail 格式有误时fail
进程控制
fork函数
函数基本用法
unistd.h
程序中调用函数创建子进程 child process
返回值:(子进程pid,0) 两个值
子进程接续父进程的位置继续执行,父进程也继续执行
父进程fork返回子进程id,子进程fork返回0(成功)
getpid , getppid
循环创建子进程

2^N-1个
