计算机体系与进程管理全解析

一,冯诺依曼体系

现代的计算机基本都是遵循冯诺依曼体系结构

中央处理器cpu:主要进行算术运算和逻辑判断

cpu执行指令首先要读取指令,然后解析指令,最后再执行指令。

**输入设备:**用户给计算机发号施令的设备

输出设备:计算机汇报结果的设备

**存储器:**分为内存和外存(硬盘),用来存储数据(二进制方式存储)

内存 VS 硬盘:

|------|------|------|
| | 内存 | 硬盘 |
| 读写速度 | 快 | 慢 |
| 存储空间 | 较小 | 更大 |
| 成本 | 较高 | 较低 |
| 断电特性 | 断电丢失 | 断电保留 |

针对存储空间:硬盘 > 内存 >= cpu

针对数据访问速度:cpu >= 内存 > 硬盘

二,指令

指令 就是指导CPU进行工作的命令 ,主要有操作码+被操作数 组成,指令本身就是一个数字,用二进制保存在内存的某个区域中。(操作码 :要做什么动作。被操作数:指令要操作的数据可能为内存地址,也可能为寄存器标号)

举个栗子:

地址0:数据0010 1110 就是:把地址14的内存加载到A寄存器

解法:前四位是操作码,后四位是操作数,根据表中操作码找出对应操作,将二进制操作数转为十进制数也就是内存大小

三,编程语言

程序 就是一组指令+这组指令要处理的数据

四,操作系统

操作系统是一组做计算机资源管理的软件的统称。目前常见的有:windows系列,unix系列,Android系列,ios系列等

操作系统由两个基本功能:

1)防止硬件被时空的应用程序滥用;

2)向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

五,进程/任务

5.1 什么是进程/任务

**进程(process)**是操作系统对一个正在运行的程序的一种抽象,也可以把进程看做程序的一次运行过程;在操作系统内部,进程又是操作系统进行资源分配的基本单位。

站在操作系统的视角,管理进程:

1)先描述出一个进程是什么样的,使用结构体,描述出进程的核心属性,进程控制块(PCB)是非常大的结构体有很多属性

2)再把多个进程组织起来 Linux操作系统,用链表把多个PCB连起来

5.2 进程控制块抽象(PCB Process Control Block)

计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在Java 语言中,我们可以通过类/对象来描述这一特征。

复制代码
// 以下代码是Java 代码的伪码形式,重在说明,无法直接运行
class PCB {
     // 进程的唯一标识------ pid;
     // 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
     // 分配给该资源使用的各个资源
     // 进度调度信息(留待下面讲解)
}

这样,每一个PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。

PCB中的关键点

1)pid(进程id) //进程的身份符

2)内存指针(一组指针) //进程需要知道要执行的指令在哪,指令依赖数据在哪

3)文件描述符表 //进程运行过程中,很多时候需要和硬盘也进行交互,硬盘上的数据以文件形式来组织
PCB的进一步属性

4)进程状态(就绪状态,阻塞状态)

5)进程优先级

6)进程的上下文

7)进程的记账信息

因为需要并发执行,所有操作系统需要进行进程的快速切换,也就是进程调度,也可称为线程调度,一个进程可以有多个线程,有多个这样的数据,但是多个线程共用同一个文件描述符表和内存指针(下一篇会着重介绍线程和进程区别这里只做最基本的了解)

5.3 CPU 分配---进程调度(Process Scheduling)

操作系统对CPU资源的分配,采用的是时间模式 ---不同的进程在不同的时间段去使用CPU 资源。

5.4 内存分配---内存管理(Memory Manage)

操作系统对内存资源的分配,采用的是空间模式 ---不同进程使用内存中的不同区域,互相之间不会干扰。

5.5 进程间通信(Inter Process Communication)

进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备"隔离性"。但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,因此进程之间就需要有进行"信息交换"的需求。进程间通信的需求就应运而生。

六,小结

武汉天气像做梦一样,梦到哪样来哪样,前几天30°今天14°,本来准备今天多写点在讲讲线程的,但是因为满30-16,我已战损实在写不动了。都不记得多久没感冒了,结果这次中招了,哈哈哈。希望我的白细胞给点力,大家也要注意身体哦,今天就到这了,如果方便希望大家可以动动发财小手给我点点赞捏!

相关推荐
Wang's Blog几秒前
Java 项目实战: 外卖平台优化-Nginx六种负载均衡策略对比与选型
java·nginx·负载均衡
时间的拾荒人3 分钟前
Qt 文件操作详解:从基础类到读写实战
开发语言·qt·面试
Wang's Blog12 分钟前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi
专业程序开发源17 分钟前
django新闻推荐系统70655-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·django·课程设计
jimy119 分钟前
基类没有虚析构函数,基类指针删除派生类对象,行为是未定义的
开发语言·c++
迅猛龙办公室28 分钟前
python获取星期字符串
开发语言·python
vx_Biye_Design33 分钟前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
写后端的胖头鱼38 分钟前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
嵌入式学习菌42 分钟前
ESP32 ModbusTCP 分片缓存
java·后端·spring
vx_Biye_Design43 分钟前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物