Linux的进程认识上
1:冯诺依曼体系
我们常见的计算机都遵循着冯诺依曼体系。

我们认识的计算机,都是由一个个的硬件组成。
输入单元:鼠标,键盘,扫描仪等。
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等
关于冯诺依曼的几个点:
1:储存器指的是内存
2:不考虑缓存情况,这里的CPU只能对内存进行读写,不能访问外设
3:外设(输入输出设备)要输入和输出数据,只能写入内存或者从内存读取
4:所有设备只能和内存打交道
2:操作系统1(Operator System)
1:概念
任何计算机系统都包含一个基本的程序集合,称为操作系统。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(库函数,shell程序等)

2:设计OS的目的
对下,与硬件交互,管理所有硬件资源
对上,为用户程序提供一个良好的执行环境

3:核心功能
在整个计算机软硬件架构中,OS定位是一款稿“管理”的软件
4:如何理解“管理”
1:描述起来,用struct结构体
2:组织起来,用链表或者其他高效数据结构
5:系统调用和库函数的概念
1:在开发角度,操作系统对外会表现成一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
2:系统调用在使用上,功能比较基础,对用户的要求也很高。所有,有心的开发者可以对部分系统调用进行封装,从而形成库,有了库,可以更加方便上层用户或者开发者进行二次开发
3:进程
1:基本概念和基本操作
课本概念:程序的一个执行实例,正在执行的程序等
内核观念:担当分配系统资源(CPU时间,内存)的实体
2:进行描述-PCB
1:基本概念
进程信息被放在一个叫做程序控制块的数据结构中,可以理解成进程属性的集合
课本上称为PCB(process control block),Linux下PCB是:task_struct
2:task_struct-PCB的一种
在Linux中描述进程的结构体叫做task_struct
task_struct是Linux内核中的一种数据结构,它会被装载到RAM(内存)里,并且包含进程的信息
3:task_struct
内容分类

组织进程

4:查看进程
1:进程的信息可以通过/proc系统文件夹查看
如:需要获取PID为1的进程信息,你需要查看/proc/1的文件夹

2:大多数进程信息同样可以用top和ps这些用户级工具获取

5:通过系统调用获取进程标识符
进程id(PID)
父进程id(PPID)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;
}
6:通过系统调用创建进程-初识fork函数
1:运行man fork认识fork
2:fork有两个返回值
3:父进程代码共享,数据各自开辟一个空间,私有一份(采用写时拷贝)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{int ret = fork();printf("hello proc : %d!, ret: %d\n", getpid(), ret);sleep(1);
return 0;
}fork之后一般需要使用if来分流
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{int ret = fork();if(ret < 0){perror("fork");return 1;}else if(ret == 0){ //childprintf("I am child : %d!, ret: %d\n", getpid(), ret);}else{ //fatherprintf("I am father : %d!, ret: %d\n", getpid(), ret);}sleep(1);return 0;
}4:进程状态
1:查看Linux内核关于进程状态的源码
/*
*The task state array is a strange "bitmap" of
*reasons to sleep. Thus "running" is zero, and
*you can test for combinations of others with
*simple bit tests.
*/
static const char *const task_state_array[] = {
"R (running)", /*0 */
"S (sleeping)", /*1 */
"D (disk sleep)", /*2 */
"T (stopped)", /*4 */
"t (tracing stop)", /*8 */
"X (dead)", /*16 */
"Z (zombie)", /*32 */
};2:进程状态的查看
ps aux / ps axj

3:僵尸进程
僵尸进程的危害
4:孤儿进程
5:进程优先级
1:基本概念
2:查看系统进程
在Linux下我们执行ps -l会出现这几个内容

3:进程的重要信息

4:查看进程优先级的命令
用top命令更改已存在进程的nice值
输入top命令->输入进程pid->输入nice值
6:进程切换

7:Linux2.6内核进程O(1)调度队列

