操作系统系列(二)——进程
往期地址:操作系统系列一 —— 操作系统概述本期主题:操作系统进程文章目录1.异常1.前言——异常控制流是什么?2.异常的处理过程2.异常的分类3.异常和进程的关系2.进程1.进程的概念2.进程所做的事情(意义)1.逻辑控制流2.私有地址空间3.linux中的进程怎么管理1.常用的linux指令2.linux下的API1.异常1.前言——异常控制流是什么?从处理器上电开始,开始运行指令,指令的运行
往期地址:
本期主题:
操作系统进程
文章目录
1.异常
1.前言——异常控制流是什么?
从处理器上电开始,开始运行指令,指令的运行序列被称为处理器的控制流
(flow of control),现代操作系统通过使控制流发生突变
来面对一些异常的情况,这些就被称为异常控制流(Exceptional Control Flow,ECF)
2.异常的处理过程
异常是我们前面提到的异常控制流中的一种,它的处理过程是:
当处理器检测到有事情发生时,就会通过异常表,跳到一个专门用来设计处理这些异常的程序中,称为异常处理程序(exception handler)
3.异常的分类
异常可以做如下分类:
类别 | 原因 | 异步/同步 | 返回行为 |
---|---|---|---|
中断 | 来自设备的I/O信号 | 异步 | 返回到下一条指令继续执行 |
陷阱(也不知道为啥叫这么奇怪的名字) | 系统调用,有意的异常 | 同步 | 返回到下一条指令继续执行 |
故障 | 潜在的可恢复的错误 | 同步 | 可能返回到当前指令重新执行,也可能直接终止 |
终止 | 不可恢复的错误 | 同步 | 不会返回,直接终止 |
4.异常和进程的关系
正是有了异常这种可以打断处理器的操作,才有了进程的诞生。因为进程有两个关键意义:
- 一个独立的逻辑控制流,看起来能够让程序独占处理器;
- 一个私有的地址空间,看起来让程序独占使用内存系统;
2.进程
1.进程的概念
一个执行中程序的实例就是进程。
2.进程所做的事情(意义)
前面已经说到,进程有两个关键意义:独立和逻辑控制流和私有的地址空间,那它是怎么做到这些事情的呢?
1.逻辑控制流
即使在系统中运行了许多程序,进程会向每个进程提供一个假象,就是它正在独占使用处理器,以一个运行着三个进程的系统为例:
在这个例子中,三个逻辑流的执行是交错的,先运行了一会进程A,然后运行进程B到完成,然后运行了一会C,然后A进程又开始运行了…
关键点在于他们是轮流使用处理器的
,没在运行的时候进程就被暂时的挂起。
2.私有地址空间
系统中的每个进程都有自己的私有地址空间,排布如下:
以32位操作系统为例,从0xc000000000到0xFFFFFFFF共1G的大小是内核地址空间(后面再探讨内核地址空间,先重点关注用户地址空间),余下的低地址3G空间则是用户地址空间。
各个段的部分的介绍:
- Code VMA: 即程序的代码段,CPU执行的机器指令部分。通常,这一段是可以共享的,即多线程共享进程的代码段。并且,此段是只读的,不能修改。
- Data VMA: 即程序的数据段,包含ELF文件在中的data段和bss段。
- 堆和栈: 这两个大家都十分熟悉了,new或者malloc分配的空间在堆上,需要程序猿维护,若没有主动释放堆上的空间,进程运行结束后会被释放。栈上的是函数栈临时的变量,还有程序的局部变量,自动释放。
- 共享库和mmap内容映射区:位于栈和堆之间,例如程序使用的printf,函数共享库printf.o固定在某个物理内存位置上,让许多进程映射共享。mmap是一个系统函数,可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址。
- 命令行参数: 程序的命令行参数
- 环境变量:类似于Linux下的PATH,HOME等环境变量,子进程会继承父进程的环境变量。
3.linux中的进程怎么管理
1.常用的linux指令
ps指令查询进程的状态
gary@ubuntu:~/workspaces/blog/thread$ man ps
PS(1) User Commands PS(1)
NAME
ps - report a snapshot of the current processes.
SYNOPSIS
ps [options]
DESCRIPTION
ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1)
instead.
2.linux下的API
更多推荐
所有评论(0)