用户进程
图形用户界面 服务器 命令行
Linux内核
系统调用 进程管理 内存管理 设备驱动程序
硬件
中央处理器(CPU) 主内存(RAM) 磁盘 网络端口
进程是指计算机中运行的所有程序,由内核统一管理,它们组成了最顶层,称为用户空间,也叫用户进程。
主内存(main memory)
内核和进程就在主内存中进行
内核负责管理以下四个方面:
进程:内核决定哪个进程可以使用CPU
内存:内核管理所有的内存,为进程分配内存,管理进程间的共享内存以及空闲内存
设备驱动程序:作为硬件系统和进程之间的接口,内核负责操控硬件设备
系统调用和支持:进程通常使用系统调用和内核通信
进程管理:
任何一个特定的时间内只能有一个进程可以使用CPU
多个进程轮流使用CPU
时间单位为毫秒级
一个进程让出CPU使用权给另外一个进程称为上下文切换(context switch)
内核负责上下文切换
工作原理:
1.CPU为每个进程计时,到时即停止进程,并切换至内核模式,由内核接管CPU控制权
2.内核记录下当前CPU和内存的状态信息,这些信息在恢复被停止的进程时需要用到
3.内核执行上一个时间段内的任务
4.内核准备执行下一个进程,从准备就绪的进程中选择一个执行
5.内核为新进程准备CPU和内存
6.内核将新进程执行的时间段通知CPU
7.内核将CPU切换至用户模式,将CPU控制权交给新进程
内核是在上下文切换的时间段间隙中运行的
进程管理涉及进程的启动、暂停、恢复、终止
内存管理:
内存在上下文切换中管理内存
MMU(Memory Management Unit)内存管理单元
MMU使用虚拟内存的访问机制
System call (systemcall) 系统调用
打开、读取和写文件这些操作都涉及到系统调用fork( )和exec( )
fork( ):当进程调用fork( )时,内核创建一个和该进程几乎一模一样的副本
exec( ):当进程调用exec( program)时,内核启动program来替换当前的进程
除了init以外,Linux中的所有用户进程都是通过fork( )来启动的
除了创建副本外,大多数情况下还可以使用exec( )来启动新的进程
例如你在命令行运行ls命令来显示目录内容,当你的终端窗口中输入ls时,终端窗口中的shell调用fork( )创建一个shell的副本,然后该副本调用exec( )来运行ls
shell即为命令行界面
Linux使用了一个增强型版本的Bourne shell ,我们称之为bash或Bourne-again shell
大部分Linux系统的默认shell是bash,通常有一个符号链接为/bin/sh