当前位置: 首页 > news >正文

建设招标网站王烨峰

建设招标网站,王烨峰,wordpress设置文章,长春网站建设模板服务目录 一、基本概念1.1描述进程-PCB1.2task_struct中内容分类 二、了解进程2.1查看进程2.2通过系统调用获取进程标识符 三、fork创建进程3.1fork()函数3.2写时拷贝 四、进程的状态4.1操作系统学科里的进程状态#xff08;运行、阻塞、挂起#xff09;4.具体的Linux状态是如何维… 目录 一、基本概念1.1描述进程-PCB1.2task_struct中内容分类 二、了解进程2.1查看进程2.2通过系统调用获取进程标识符 三、fork创建进程3.1fork()函数3.2写时拷贝 四、进程的状态4.1操作系统学科里的进程状态运行、阻塞、挂起4.具体的Linux状态是如何维护的 五、进程的优先级六、环境变量6.1 环境变量的基本概念6.2和环境变量相关命令6.3获取环境变量的方式 七、进程地址空间7.1程序地址空间7.2写时拷贝 一、基本概念 课本概念程序的一个执行实例正在执行的程序等内核观点担当分配系统资源CPU时间内存的实体。 1.1描述进程-PCB 操作系统是一个软硬件资源管理的软件那么相比进程也要被操作系统OS管理。 那么操作系统是如何对进程进行管理的呢答案肯定是先描述在组织对一个进程我们首先要用计算机语言对其进行描述再利用相关的数据结构将其组织管理起来。 在操作系统的书籍上称描述进程的结构体为pcb在linux操作系统下这个结构体叫做task_struct这是在操作系统内核中创建的一种数据结构。但是一台计算机上会同时有多个进程(你可以打开你的任务管理器看到许多进程正在跑着)操作系统是如何将这么多进程组织起来的呢 是将各个进程的pcbprocess control block利用链表这种数据结构对其组织起来。 1.2task_struct中内容分类 操作系统内核中创建pcb来完成对进程的管理那么这个结构体里究竟都有什么内容呢 标示符: 描述本进程的唯一标示符用来区别其他进程。这里的标示符指的是PID状态: 任务状态退出代码退出信号等。优先级: 相对于其他进程的优先级。程序计数器: 程序中即将被执行的下一条指令的地址。内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针上下文数据: 进程执行时处理器的寄存器中的数据。I O状态信息: 包括显示的I/O请求,分配给进程的I O设备和被进程使用的文件列表。记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。其他信息 //截取源码部分 struct task_struct {volatile long state;//状态 /* -1 unrunnable, 0 runnable, 0 stopped */void *stack;//栈atomic_t usage;unsigned int flags; /* per process flags, defined below */unsigned int ptrace;int lock_depth; /* BKL lock depth *//* task state */int exit_state;int exit_code, exit_signal;int pdeath_signal; /* The signal sent when the parent dies *//* ??? */unsigned int personality;unsigned did_exec:1;unsigned in_execve:1; /* Tell the LSMs that the process is doing an* execve */unsigned in_iowait:1;/* Revert to default priority/policy when forking */unsigned sched_reset_on_fork:1;pid_t pid;//标识符pid_t tgid;//... };二、了解进程 2.1查看进程 先看看猪跑的样子(嘿嘿)。 进程的信息可以通过 /proc 系统文件夹查看 大多数的进程同样可以通过top、ps这样的工具来查看 自己创建一个进程 普通的代码 2.2通过系统调用获取进程标识符 进程idPID父进程idPPID 这里可以看到test的pid是13414而它的ppid为9927它的父进程是什么呢 其实可以查看下。 ps -axj | head -1 ps -axj | grep bash | grep -v grep 结论我们自己写的程序是通过bash来创建子进程执行的所以使用命令行bash启动的程序其父进程都是bash。 三、fork创建进程 3.1fork()函数 fork 函数的作用是创建一个子进程函数声明如下 这里提一下返回值父进程创建成功会返回子进程的PID创建失败返回 -1创建出子进程以后子进程也会执行fork但是子进程不会继续创建新的进程因此返回值是0。这是我们辨别父子进程的关键依据。 子进程运行 fork()函数 返回0父进程运行 fork()函数 返回子进程的PID fork函数调用后的变化 fork之后执行流会变成两个执行流 fork执行之后父子进程父子进程谁先执行是随机的由调度器决定先调度谁 fork之后fork之后的代码共享通常我们采用if else 语句来进行分流父子进程执行不同的代码 不同进程之间是相互独立的父子进程也是如此这是如何实现的呢 对于代码代码是只读的父子进程公用一份代码谁读谁的代码互不影响。 对于数据当有一个执行流想要修改数据的时候会发生写时拷贝下面的进程地址空间会提到来保证进程的独立性。 使用fork( )创建子进程的例子 打印的顺序不一定是先打印父进程然后打印子进程顺序是随机的子进程被创建以后会立马加入到运行队列中谁先运行完就先打印 问题为什么要给子进程返回0给父进程返回子进程的pid 答案返回不同的返回值是为了区分让不同的执行流执行不同的代码块一般而言fork之后的代码父子共享。一个父进程可以有多个子进程而一个子进程可以有多个父进程给父进程返回子进程的pid可以用来标识子进程的唯一性其目的也是为了区分子进程。 3.2写时拷贝 写时拷贝现象 先看以下代码与执行结果。 我们发现两次打印的值居然不一样不是说父子进程共享一份数据和代码吗 答案是发生了写时拷贝 写时拷贝原理 四、进程的状态 4.1操作系统学科里的进程状态运行、阻塞、挂起 运行状态 阻塞状态 当一个进程的资源没有就绪时系统会把这个进程放入等待队列中当这个资源就绪时就会把进程从等待队列放入运行队列中。 挂起状态 假设操作系统的内存严重不足时将等待队列中进程的代码和数据“换出”时这个进程的状态为挂起状态。 4.具体的Linux状态是如何维护的 下面的状态在kernel源代码里定义 /** 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运行状态(running):并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。S睡眠状态sleeping): 意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡interruptible sleep。D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的 进程通常会等待IO的结束。T停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可 以通过发送 SIGCONT 信号让进程继续运行。X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。 僵死状态Zombies是一个比较特殊的状态。当进程退出并且父进程使用wait()系统调用,后面讲 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程僵死进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。 所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态 僵尸进程的危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎 么样了。可父进程如果一直不读取那子进程就一直处于Z状态是的 维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话 说Z状态一直不退出PCB一直都要维护是的 那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构 对象本身就要占用内存想想C中定义一个结构体变量对象是要在内存的某个位置进行开辟空 间 孤儿进程 父进程如果提前退出那么子进程后退出进入Z之后那该如何处理呢 父进程先退出子进程就称之为“孤儿进程” 孤儿进程被1号init进程领养当然要有init进程回收喽 五、进程的优先级 问题1什么是优先级 进程的优先级代表了对于资源的访问谁先访问谁后访问。 问题2为什么要有进程优先级 因为资源是有限的进程是多个的注定了进程之间的竞争关系操作系统必须保证进程的良性竞争确认优先级。 问题3怎么修改优先级 UID : 代表执行者的身份PID : 代表这个进程的代号PPID 代表这个进程是由哪个进程发展衍生而来的亦即父进程的代号PRI 代表这个进程可被执行的优先级其值越小越早被执行NI 代表就是我们所要说的nice值了其表示进程可被执行的优先级的修正数值 Linux不想过多的让用户参与优先级的调整在我们对应的范围内进行优先级调整nice:[-20,19] PRI值越小越快被执行那么加入nice值后将会使得PRI变为PRI(new)PRI(old)nice。 用top命令更改已存在进程的nicetop进入top后按“r”–输入进程PID–输入nice值 六、环境变量 6.1 环境变量的基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如我们在编写C/C代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪里但 是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途还有在系统当中通常具有全局特性 6.2和环境变量相关命令 echo: 显示某个环境变量值export: 设置一个新的环境变量env: 显示所有环境变量unset: 清除环境变量set: 显示本地定义的shell变量和环境变量 6.3获取环境变量的方式 1.命令行第三个参数 #include stdio.h int main(int argc, char *argv[], char *env[]) {int i 0;for(; env[i]; i){printf(%s\n, env[i]);}return 0; }2.通过第三方变量environ获取 #include stdio.h int main(int argc, char *argv[]) {extern char **environ;int i 0;for(; environ[i]; i){printf(%s\n, environ[i]);}return 0; }总结 环境变量是系统提供的一组namevalue形式的变量不同的环境变量有不同的用户通常具有全局属性可以被子进程继承。 我们所运行的进程都是子进程bash在启动时会从操作系统的配置文件中读取环境变量的信息子进程会继承父进程交给他的环境变量。 七、进程地址空间 7.1程序地址空间 验证的代码及结果 7.2写时拷贝 所谓的地址空间是什么 本质上是一个描述进程可视范围的大小地址空间内一定要存在各种区域的划分对线性地址进行start、end即可。 地址空间本质是内核的一个数据结构对象类似PCB一样地址空间也是要被操作系统管理的先描述、在组织 为什么要有进程地址空间 1.让进程以统一的视角看待内存。 2.增加进程虚拟空间可以让我们访问内存的时候增加一个转换的过程在这个转换的过程中可以对我们的寻址请求进行在审查一旦有异常访问直接拦截该请求不会到达物理内存保护物理内存。 3.因为有地址空间和页表的存在将进程管理模块和呢村管理模块进行解耦合
http://www.pierceye.com/news/510877/

相关文章:

  • 成都手机网站设计山东省建设监理协会网站6
  • 长春网站建设那家好沛县做网站
  • 做网络写手 哪个网站比较好电商网站开发用什么语言
  • 如何做网站资讯淘宝官网登录入口
  • 江苏建设工程招标网官方网站免费网址怎么申请注册
  • 河池网站优化网络宣传渠道有哪些
  • 外贸建立网站怎么做42区 网站开发指南
  • wordpress多本小说站出售延安做网站
  • 北京快速网站建设找工作一般上什么网站比较好
  • 做外贸必须有公司网站么下沙网站制作
  • 西安学校网站建设网站搜索工具
  • 小型网站的建设方案龙江人社app二维码图片
  • 西宁微网站建设wordpress更新文章post.php错误
  • 网络营销网站平台有哪些众希网站建设
  • 网站建设营销的技巧公司招聘网站排行榜
  • 长治网站建设收费多少农村自建房设计图 户型图
  • 广州网站建设 骏域网站建设做搜狗网站优化首页软
  • 广州网站设计软件简约大方网站
  • 网站建设与管理专业好吗做国际贸易如何建网站
  • 小说百度风云榜上海seo网络推广渠道
  • 建设局网站打不开是什么原因wordpress客户端插件
  • 农业 网站源码网站制作产品优化
  • 企业公司网站制作建设怎么区分营销型网站
  • 如何选择顺德网站建设网站开发源代码
  • 北京城乡建设部网站网站页面是自己做还是使用模板
  • 网新企业网站管理系统厦门好景科技做网站
  • 手机网站开发语言深圳网站建设培训
  • wordpress做的视听网站怎么用ftp清空网站
  • 网站建设能干什么网页设计代码模板人物介绍
  • 桂阳网站设计做p2p投资理财的网站