Linux 系统编程Day1

学也学不好,记也记不住。只能靠做笔记这个样子喽。

操作系统的核心: 内核

  • 1.指完整的软件包,包括管理计算机资源的核心层软件,以及附带的所有标准软件工具。诸如命令行解释器。图形用户界面。
  • 2.狭义上指管理和分配计算机资源的核心层软件。

内核职能:

  • 进程调度:通过CPU 执行程序指令。Linux 属于抢占式多任务操作系统。
    • 多任务指多个进程同时驻留内存,且每个进程都能获得对CPU的使用权。 
  • 内存管理:如今计算机的内存容量客观,但软件的规模也保持了相应的增长故物理内存仍属于有限资源。
    •   Linux 采用虚拟内存管理机制
      • 优势:进程与进程之间,进程与内核之间彼此隔离,因此一个进程无法读取或修改内核或其他进程的内容。
      • 只需将进程的一部分保持在内存中,降低了每个进程对内存的需求量,同时在RAM 中同时加载更多进程。CPU的资源利用率更加充分。
  • 提供文件系统: 内核在磁盘上提供有文件系统允许对文件执行创建、获取、更新、删除等操作。
  • 创建/终止进程: 内核将新程序载入内存,为其提供运行所需的资源。 这样一个运行中的程序 我们成为进程。进程执行完后,内核要确保释放其占用的资源。
  • 对设备的访问:计算机外接设备(鼠标等

内核态 用户态

  • 将内存区域划分相应的空间,用户态访问用户空间,内核态全能访问。

进程

  正在执行的程序实例,执行程序内核会将程序代码载入到虚拟内存,为程序变量分配空间。以记录与进程有关的各种信息(进程ID , 用户ID , 组ID

  进程的内存布局

  • 文本: 程序的指令
  • 数据: 程序使用的额静态变量
  • 堆   : 动态分配内存
  • 栈   : 随函数调用 返回而 增减的一片内存区域。用与为局部变量和函数调用连接信息分配存储空间。

创建进程和执行程序

  •   进程通过系统调用fork() 创建一个新进程,调用fork() 的进程被称为父进程,内核通过对父进程的复制来创建子进程。继承过来的副本不会影响父进程。
  •        子进程通过execve() 去加载并执行一个全新的程序。execve() 会销毁现有的文本段、数据段、栈 堆 ,并根据新程序代码 创建来替换他们。

进程通信及同步

  •  Linux 系统上运行许多个进程,许多都是独立运行。然而,有些需要相互合作达成预期目
  •     进程间通信(IPC 机制
    •   信号: 用来表示事件的发生
    •        管道: 进程间传递数据 shell(  |  FIFO
    •        套接字: 一台/多台  联网主机所运行的进程之间传递数据
    •       文件锁定: 防止其他进程读取或更新文件内容 允许某进程对文件的部分进程加以锁定。
    •       消息队列:进程间交换信息(数据包
    •       信号量 : 同步进程动作
    •       共享内存: 允许两个以上进程共享一块内存。

init进程

  • 系统引导时,内核会创建一个init 的特殊进程,所有进程之父 对应  /sbin/init  文件。即 系统所有进程不是由init 直接创建 就是间接创建的
  • init 进程号总为1. (super man 也杀不死

守护进程

是具有特殊用途的进程

  • 长生不老   死之前 一直活着(溜
  • 守护进程在后台运行,无控制终端 供读取或写入数据。

资源限制

  • 每个进程都会消耗诸如打开文件,内存以及CPU时间之类的资源,使用系统调用setrlimit(),可为消耗的各类资源设定一个上限。
  • fork()创建的子进程 会从父进程继承资源限制

线程

  • 每个进程可执行多个线程。
  • 共享同一数据区和堆区  每个线程拥有自己的栈区(用来装载本地变量和函数调用链接信息。
  • 可以通过共享全局变量通信。

猜你喜欢

转载自www.cnblogs.com/jingchu/p/10260412.html