建设百度网站多少钱,柳城企业网站建设价格,炫酷网站模板免费下载,wordpress评论滑动插件进程的基本概念 计算机结构体系冯诺依曼 操作系统的管理进程进程的特性标识符系统的调用 创建新的进程 进程的状态进程队列进程的状态在liunx查看进程状态、 计算机结构体系
冯诺依曼 在没有存储器之前#xff0c;所有的信息都是直接进入CPU#xff0c;这样效率很差#xf… 进程的基本概念 计算机结构体系冯诺依曼 操作系统的管理进程进程的特性标识符系统的调用 创建新的进程 进程的状态进程队列进程的状态在liunx查看进程状态、 计算机结构体系
冯诺依曼 在没有存储器之前所有的信息都是直接进入CPU这样效率很差因为读入写出的速度远远慢于cpu计算的速度。所以中间加入缓存区让cpu从内存中读取读取的速度很快。所以冯诺依曼体系极大层度弥补了读入和写出速度慢的问题。
操作系统的管理
管理是一个抽象的词我们可以描述一个管理的场景 校长是管理者督导员是传递消息的学生是执行者。 回到计算机。 操作系统就是管理者他是一款管理软件督导员就是各种驱动学生则是硬件设备。在操作系统的管理下操作系统用结构体描述结构体的,该结构体描述了设备的重要特性通过管理特性数据管理你比如设置你关机你就关机。
进程
进程的概念进程是操作系统最重要的概念他在书上都是说他是运行起来的程序。 由操作系统管理进程 而进程则由两部分组成 进程控制块运行的程序。运行的程序受到进程控制块pcb的管理。
进程的特性
标识符
进程在win中可以在任务管理器中查看但是在liunx中只能用命令 我们也可结合管道 接下来我们将看到第一个跑起来的进程 程序中 会一直跑接下来我们查看程序的运行情况 test是运行起来的程序其pid是其唯一标识符。 我们如何拿到进程的pid号的呢 他的运行代码是 重要概念进程的工作目录 如何查看进程存在的位置呢 工作目录 工作目录是程序写入文件中。比如我们使用程序创建一个文件那么这个文件就在这里。也就是工作目录。
系统的调用 创建新的进程
首先认识一个函数fork fork函数的功能如下 为什么两个进程的fpid不同呢这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次却能够返回两次它可能有三种不同的返回值 1在父进程中fork返回新创建子进程的进程ID 2在子进程中fork返回0 3如果出现错误fork返回一个负值
此时我们便可以通过返回值的不同让父子进程干不同的事情。
进程之间是相互独立的杀掉子进程不影响父进程。同样杀掉父进程也不影响子进程。
进程的状态
进程队列 当程序中向硬件读取数据时进程就会一直等着。当然cpu并不是一直只为一个进程提供服务在一个时间片内cpu只为此进程提供服务。此时排队就是必要的了。注意此时排队的是pcb进程控制块。 小助手 偏移量的求法
进程的状态
进程的一般状态
运行运行是程序正在进行的一般状态阻塞阻塞是程序正在等待资源的状态挂起当操作系统内存吃紧操作系统将阻塞的部分进程拷贝到磁盘中。该进程被暂时挂起。 等待其实就是排队也就是pcb代替我进程去排队。
在liunx查看进程状态、 liunx有以上的几种状态
首选 我们写一个运行起来的父子程序。 神奇的是 test并不是r状态而是s状态s状态是浅度睡眠浅度睡眠是可以打断的睡眠。D是 深度睡眠深度睡眠不可以被杀掉。 接下来我们看T状态使用命令kill -19 即可暂停进程 此时kill -18就可以继续运行
接下来我们介绍孤儿进程僵尸进程。 运行下面代码
#includeiostream
#includeunistd.h
#includesys/types.h
#includestdlib.h
using namespace std;int main()
{coutmypid:getpid() myppid:getppid()endl;
pid_t xfork();
int i5;
int k10;
if(x0)
{while(i){i--;
cout我是子endl;coutmypid:getpid() myppid:getppid()endl;
sleep(1);}exit(0);}
else
{while(k){k--;
cout 我是父endl; coutmypid:getpid() myppid:getppid()endl;
sleep(2);
}
}
return 0;
}
当5次循环结束后子进程结束子进程并不会直接被干掉而是变为僵尸进程僵尸进程是等待父进程接受退出数据用的。 僵尸进程的危害
僵尸进程的退出状态必须一直维持下去因为它要告诉其父进程相应的退出信息。可是父进程一直不读取那么子进程也就一直处于僵尸状态。僵尸进程的退出信息被保存在task_struct(PCB)中僵尸状态一直不退出那么PCB就一直需要进行维护。若是一个父进程创建了很多子进程但都不进行回收那么就会造成资源浪费因为数据结构对象本身就要占用内存。僵尸进程申请的资源无法进行回收那么僵尸进程越多实际可用的资源就越少也就是说僵尸进程会导致内存泄漏。