| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 计算机操作系统之进程、线程、协程 -> 正文阅读 |
|
[系统运维]计算机操作系统之进程、线程、协程 |
一、线程、进程、程序概念1、程序:程序其实就是存在操作系统上的一大堆指令(指令序列),是一个静态的概念,比如你的QQ放在电脑上,但是没有去执行它,那么它就是一个程序。 程序在内存中执行时主要包括三个部分:程序段、数据段、进程控制块(PCB)。 程序段用来存放程序中的指令本身。 数据段存放程序运行中需要的一些数据,比如变量、常量等。 PCB是一个数据结构,用来描述进程的各种信息,比如程序代码的存储位置,它是进程存在的唯一标识。 2、进程:进程相比程序来讲,他是一个动态的概念,当你电脑上的程序放进内存中开始运行的时候,他就是一个进程。粗俗地来讲,进程就是正在执行的程序,是一个动态的,它拥有自己的独立的操作空间和资源,也就是说,进程是操作系统分配资源(比如内存)和调度的基本单位。 3、线程:实际上进程在运行的时候,实际上是多个或者一个线程在运行。比如你开始运行了QQ,那么你可能打开了多个聊天框和多个人聊天,那么实际上这就是一个多线程并发执行的例子。也就是说,线程是运行的基本单位,但是和进程不同的是,线程它没有自主独立的操作空间和资源,因为一个进程往往有很多个线程并发进行,因此它们一般是共享自己本进程的资源和内存的。 线程和进程还有一个关系,就是一个进程至少拥有一个线程(主线程),但是可以拥有多个线程,也就是我们常说的多线程。 4、协程:除开以上这三个概念,还有一个概念叫做协程。协程的本质其实也是一个线程,他是我们操作系统上所部署的虚拟机中所产生的线程,比如Java里面JVM中的线程,就叫做协程。但是为什么我们还是将JVM里面的协程叫做线程呢?因为它和操作系统中的线程有一个一对一的关系,也就是说,比如JVM有一个.class文件要开启协程,它在JVM虚拟机上开启协程和我们操作系统上的.exe文件开启线程是一个道理。但是JVM终究没有真正的操作系统吊,所以当它开启一个协程的时候,那么它就会向操作系统请求让操作系统给他开启线程,所有JVM运行的时候实际上就是运行的操作系统的线程,所有也把JVM的所创建的协程叫做线程。
1.1、进程1.1.1、进程的状态:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 其中,它的三种基本状态是: 1、就绪态(Ready):已经具备运行状态,但是因为没有CPU空闲,所以没法运行(万事俱备,只欠CPU)。 2、运行态(Runing):占有CPU并在CPU上面运行(多少核就能有多少进程处于这个状态)。 3、阻塞态(Wait/Block):因为等待某一事务,而不能运行。如等待读磁盘操作。 另外两种状态: 1、创建态(New):每个进程在运行前,操作系统会对它进行分配空间、分配资源、初始化PCB块的操作,这样一个进程才能投入使用,这个过程就叫做创建态。 2、终止态(Terminated):进程在运行结束或者因为BUG而不能运行下去的时候,需要对它进行撤销操作,并回收它的资源和内存,删除它的PCB块,这个过程叫做终止态。 1.1.2、进程转换:进程转换主要发生几个基本状态之间:
1.1.3、进程通信顾名思义,就是进程之间的信息交换。 进程各自拥有自己的地址空间,并且各自相互独立,所以一个进程是不能直接访问另一个进程的地址空间的,但是进程之间的信息交互却是必须实现的,操作系统提供了以下三种方法。 1、共享存储: 进程之间不能互相通信,所以操作系统给他们分配了一个共享空间,用来进行进程之间的互相通信。
这种方式有两种共享模式: 1、基于数据结构:速度慢,限制多,低级方式。 2、基于存储区:在内存划出一块空间,数据形式、存放位置都由进程决定,高级方式。 2、管道通信: 管道是指用于连接进程读写的一个文件,又叫pipe文件,是在内存中开辟了一个固定大小的缓存空间,大小一般和内存页面相同。 管道只能实现半双工通信,要实现双向通信需要两个管道,各进程互斥访问管道。 数据以字符流的形式写入管道,而且是写满再读,读完再写。 数据读出来数据会被抛弃,找不回来了,所以读进程只能有一个。 3、信息传递: 进程之间消息传递利用格式化的消息作为单位,通过操作系统提供的接受和发送两个原语进行数据交换。
信息传递有两种实现方式: 1、直接通信方式: 每个进程会有消息缓冲队列,直接通信就是将发送进程的消息利用发送原语直接挂在接收进程的消息缓冲队列上,再由后者用接受原语进行读取。 2、间接通信方式: 操作系统会为所以管理的进程设置一个“信箱”,进程之间的消息需要先发送到中间实体(信箱)中,因此也叫信箱通信方式。
1.1.4、进程调度 需要进程调度的几个情况: 1、当前进程主动放弃了处理机。 比如:进程运行完毕,运行发送异常,等待I/O处理。 2、当前进程被迫放弃处理机。 比如:分给进程的时间片用完了、有优先级的进程进入就绪队列、有更紧急的事情需要处理。 调度方式:剥夺式和非剥夺式(不行了)。 进程调度:主要过程是用某些方式和策略(进程调度算法),从进程的就绪队列中选择一个进程,将它交给处理机进行处理。进程调度实际上是一种低级调度过程,它的调度是非常频繁的,一般操作系统都会配置。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 11:10:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |