操作系统概念

内容均来自网络资源,非原创

  1. 进程
  2. 线程
  3. 系统调用;进程虚拟地址空间;用户态 内核态;
  • 系统调用
    提供给应用程序调用,用于请求OS内核服务的一组接口。内核通过提供系统调用为应用程序提供服务,系统调用是应用程序与OS内核之间交互的唯一方式。为了保护OS内核系统进程安全,系统调用基于软中断实现,执行系统调用时触发中断服务函数,应用程序会从用户态进入内核态。
    操作系统概念
  • 用户空间/态 内核空间/态
    32位Linux系统中,每个用户进程拥有4G大小的虚拟地址空间,虚拟空间被分成用户空间(地址较高的1GB区域)、内核空间(剩余3GB区域)两个区块。内核空间映射内核的代码和数据,内核空间代码运行在CPU高特权级别,可以访问所有受保护内存空间和底层硬件设备。用户空间映射用户自己编写的代码,用户空间代码运行在CPU低特权级别。
    (1)当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。
    (2)当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。
  • 进程虚拟地址空间
    程序路径:完整的绝对路径字符串如 “/home/simba/code/asm/simple”
    环境变量:类似linux下的PATH,HOME等的环境变量,子进程会继承父进程的环境变量。
    命令行参数:类似ls -l 中-l 就是命令行参数,而ls 就是可执行程序。
    栈:就是堆栈,程序运行时需要在这里做数据运算,存储临时数据,开辟函数栈等。在Linux下,栈是高地址往低地址增长的。对于函数栈来说,函数运行完毕就释放内存,举例递归来说,递归太多层的话很可能造成栈溢出。局部变量(不包含静态变量);局部可读变量(const)都分配在栈上。
    共享库和mmap内存映射区:函数共享库固定在某个物理内存位置上,让许多进程映射共享。mmap是个系统函数,可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来做而不需要read/write函数。
    堆:即malloc申请的内存,使用free释放,如果没有主动释放,在进程运行结束时也会被释放。
    BSS Segment:未初始化全局变量、静态局部变量
    数据段 Data Segment: 初始化过的全局变量、静态局部变量
    文本段Text Segment: 可执行程序(二进制)(.text);全局初始化只读变量(const)(.rodata);字符串常量(.rodata);

操作系统概念

  1. 缺页异常