1.进程实体
1.1.为什么需要进程
1.2.进程的实体
1.2.1.主存中的进程形态
- 标识符:唯一标记一个进程,用于区别其他进程
- 进程状态:标记进程的进程状态,如:运行态
- 程序计数器:指向进程即将被执行的下一条指令的地址
- 内存指针:程序代码,进程数据相关指针
- 上下文数据:进程执行时处理器存储的数据
- IO状态信息:被进程IO操作所占用的文件列表
- 记账信息:使用处理器时间,时钟数总和等
进程控制块(PCB)
1.2.1.进程与线程
操作系统对进程的调度实际上是对进程里线程的调度。
2.状态模型
2.1.就绪状态
2.2.执行状态
2.3.阻塞状态
2.4.创建状态
2.5.终止状态
2.6.进程间的切换
3.进程同步
3.1.为什么需要进程间同步
生产者-消费者问题:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <vector>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int num = 0; //全局变量
void *producer(void*){
int times = 10000000;
while(times --){
//pthread_mutex_lock(&mutex);
num += 1;
//pthread_mutex_unlock(&mutex);
}
}
void *comsumer(void*){
int times = 10000000;
while(times --){
//pthread_mutex_lock(&mutex);
num -= 1;
//pthread_mutex_unlock(&mutex);
}
}
int main(){
printf("Start in main function.");
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, &producer, NULL);
pthread_create(&thread2, NULL, &comsumer, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Print in main function: num = %d\n", num);
return 0;
}
结果不为0.
3.2.进程间同步的原则
临界资源:
原则:
进程间同步的方法
3.3.线程同步
线程同步的方法
4.Linux的进程管理
4.1.Linux进程的相关概念
4.1.1.进程的类型
前台进程
终端shell
前台进程就是具有终端,可以和用户交互的进程
后台进程
与前台进程相对,没有占用终端的就是后台进程
后台程序基本上不和用户交互,优先级比前台进程低
需要执行的任务以&结束
守护进程
4.1.2.进程标记
进程ID
父子进程关系可以通过pstres命令查看
进程的状态标记
4.2.操作Linux进程的命令
-
ps命令
列出当前的进程状态
ps -aux:打印详细信息
ps -u root:查看root的进程
-
top
用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
-
kill