热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

正襟危坐说操作系统(叁):进程

进程进程,即一个程序加载到内存后就变为进程。为了提高CPU利用率,人们想起将多个程序同时加载到计算机里,并发执行。这些同时存在于计算机

进程

进程,即一个程序加载到内存后就变为进程。

为了提高CPU利用率,人们想起将多个程序同时加载到计算机里,并发执行。这些同时存在于计算机内存的程序就称为进程。进程让每个用户感觉到自己独占CPU。因此,进程就是为了在CPU上实现多道编程而出现的概念。

 

进程的状态

我们将进程分为三种状态:执行、阻塞、就绪。

 

进程创立

进程创立步骤:

①分配进程控制块

②初始化CPU寄存器

③初始化页表

④将程序代码从磁盘读进内存

⑤将处理器状态设置为“用户态”

⑥跳转到程序的起始地址(设置程序计数器)

注意:跳转指令是内核态指令,而在第5步时处理器状态已经被设置为用户态,而用户态下是不能执行内核态指令的。这就需要硬件帮忙了,硬件必须将第5、6步作为一个步骤一起完成。

进程创立在不同操作系统所需的方法也不一样。(基本按以上步骤)

UNIX将进程创立分两个步骤:第一,创建一个与自己完全一样的新进程;第二,exec,将新的进程的地址空间用另一个程序的内容覆盖,然后跳转到新程序的起始地址,从而完成新程序的启动。

Windows使用一个系统调用就完成进程创建。这个系统调用就是CreateProccess。在调用该函数时我们把欲执行的程序名称作为参数传过来。创建新的页表,不需要复制别的进程。

 

进程管理

与一个社会管理人类似,操作系统要管理进程就要维护关于进程的一些信息。当一个进程产生时,操作系统也就需要为其建立记录。而操作系统用于维护进程记录的结构就是进程表或进程控制块(PCB)。这个进程表或PCB里面存放的就是有关该进程的资料。一般包括:进程ID、程序计数器、寄存器、状态字、栈指针、信号……

这个进程表保持在操作系统所在内核空间里。

进程管理最大的问题是资源分配。资源分配要考虑公平与效率。这样,公平与效率就成了进程管理中永恒的主题。

 

进程的缺陷

1、进程只能在一个时间内干一件事(执行一个程序执行流),而如果想同时干两件或多件事情,进程就不够用了。

2、进程在执行过程中如果阻塞,例如等待输入,整个进程就将挂起,而无法继续执行。这样,即使进程里面有部分工作不依赖于输入数据,也无法推进

为了解决这个问题,人们发明了线程。

 


推荐阅读
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文探讨了在Python中多线程与多进程的性能差异,特别是在处理CPU密集型任务和I/O密集型任务时的表现。由于全局解释器锁(GIL)的存在,多线程在利用多核CPU方面表现不佳,而多进程则能有效利用多核资源。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
author-avatar
宫金丹865
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有