做的时间长的网站制作公司哪家好,综合网页设计,郴州新网招聘信息,承接app网站开发的广告#x1f4bb;文章目录 #x1f4c4;前言计算机的结构体系与概念冯诺依曼体系结构操作系统概念目的与定位 进程概念描述进程-PCBtask_struct检查进程利用fork创建子进程 进程状态进程状态查看僵尸进程孤儿进程 #x1f4d3;总结 #x1f4c4;前言 作为一名程序员#xff0c… 文章目录 前言计算机的结构体系与概念冯诺依曼体系结构操作系统概念目的与定位 进程概念描述进程-PCBtask_struct检查进程利用fork创建子进程 进程状态进程状态查看僵尸进程孤儿进程 总结 前言 作为一名程序员我们天天都在与代码打交道但你是否有了解过我们的程序是如何在操作系统中运行与调度的呢如果你对进程与计算机不甚了解那么本文将带领你走向操作系统进程的第一步。 计算机的结构体系与概念
在了解进程的相关知识前我们需要先了解以下计算机的组成体系及其概念。
冯诺依曼体系结构
冯诺依曼体系结构是一种计算机的组成方案因为使用其体系构造的计算机性价比很高所以我们日常生活中使用的计算机如笔记本、服务器等大部分都遵守着冯诺依曼体系结构。
冯诺依曼体系结构规定了计算机由五个部分组成控制器、运算器、储存器、输入设备、输出设备。 注意
这里的储存器指的是内存不考虑缓存情况这里的CPU能且只能对内存进行读写不能访问外设输入或输出设备外设输入或射出设备要输入或输出数据只能写入内存或从内存中读取总的来说所有设备都只能直接和内存打交道
操作系统
概念
任何计算机系统都包含一个基本的程序集合称为操作系统OS笼统的理解操作系统包含
内核进程管理、内存管理、文件管理、驱动管理其他程序函数库、shell程序等
目的与定位
操作系统是纯正用于管理的软件操作系统与硬件交互管理所有的软硬件资源。 进程
概念
如果你没有学习过系统知识可能会以为进程就是把二进制程序拷贝执行而已但其实进程指的是PCBprocess control block 可执行程序
描述进程-PCB
PCB又名进程控制块这是一个进程属性的集合体用于描述进程在linux内核是一种链式结构(task_struct)它会被装载到内存中。
task_struct
在Linux里面描述进程的结构体就叫做task_struct其内容分为
标志符描述本进程的唯一标识符用于区别其他进程 。状态任务装提、退出代码、退出信号等 。优先级相对于其他进程的优先级。程序计数器程序中即将被执行的下一条指令的地址。内存指针包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针。上下文数据进程执行时处理器的寄存器中的数据「Ip指针」I / O状态信息包括显示的I / O 请求分配给进程的 I / O设备和被进程使用的文件列表。记账信息可能包括处理器总和使用的时钟数总和时间限制记帐号等。其他信息。
检查进程
进程的信息可以通过linux目录中的/proc文件夹来查看 或者你也可以用top / ps 等指令工具来获取
利用fork创建子进程
在Linux平台下C语言可以用fork函数来创建子进程一般通过fork的返回值来进行分流父子进程代码共享变量数据等使用写实拷贝当数据没被修改时数据共用。
#include stdli.h
#include sys/types.h
#include unistd.hint main() {//fork如果创建子进程成功则返回0失败返回-1。pid_t id fork(); if(id 0){printf(我是子进程\n);}else{printf(我是父进程\n);}return 0;
}进程状态
在Linux中进程拥有多种状态一个进程可以有多个状态。让我们来看看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 */
};R 运行状态说明进程要么在运行要么在运行队列里。S 睡眠状态说明进程在等待事件完成。D 磁盘休眠状态又名不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。T 停止状态通过发送 SIGSTOP 信号来给进程停止这个被停止的进程可以通过发送 SIGCONT 信号让进程继续运行。X 死亡状态这个状态只是一个返回状态你不会在任务列表看到这个状态。
进程状态查看
我们可以通过top指令或ps指令来检查进程
僵尸进程
僵尸进程是一种比较特殊的状态当子进程退出而父进程没有读取到子进程的返回码时就会产生僵尸进程。因为僵尸进程还没被系统清理其开辟的空间所以僵尸进程还会导致内存泄漏。
C语言创建僵尸进程
#include stdio.h
#include stdlib.hint main()
{pid_t id fork();if(!id){ //C语言可以通过getpid指令来获取进程的idprintf(child[%d] is return....\n, getpid());sleep(2);exit(EXIT_SUCCESS);}else {printf(parent[%d] is sleeping...\n,getpid());sleep(10);}return 0;
}孤儿进程
孤儿进程和僵尸进程恰好相反如果父进程先退出子进程继续运行那么子进程就会成为孤儿进程。成为孤儿进程后就被交给pid为1的进程管理也就是系统。
#include stdio.h
#include unistd.h
#include stdlib.hint main()
{pid_t id fork();int i 0;if (id 0){ //childwhile(i 10){printf([%d] : child_pid[%d] : parent_pid[%d]\n, getpid(), getppid());sleep(1);} }else{ //parentprintf(parent[%d], is exit\n, getpid());exit(0);}return 0;
}总结 博客主页主页 我的专栏C 我的githubgithub