计算机工作原理(简单介绍)

计算机基础

计算的需求是人类一直都需要的,从最初的计算工具机械计算机 到目前的电子计算机的发展过程,追求更快速、更稳定、更微型

冯诺依曼体系

约翰·冯·诺依曼(John von Neumann,1903年12月28日---1957年2月8日) ,匈牙利裔美籍数学家、计算机科学家、物理学家和化学家,出生于布达佩斯犹太家庭,1926年获布达佩斯大学数学博士学位 ,1933年起任普林斯顿高等研究院教授,1937年当选美国国家科学院院士,计算机祖师爷

现在计算机大多数都是遵守这个冯诺依曼体系

1.cpu

2.存储器

3.输入设备

4.输出设备
访问速度 :cpu > 内存 > 硬盘
存储空间 :硬盘 > 内存 > cpu

cpu基本工作流程简单介绍 ,其有逻辑门、算数逻辑单元、寄存器等等,这里没有进行介绍,重要的介绍了指令的执行顺序

指令(Instruction)

指令就是cpu进行工作时候的一些命令,由操作码和操作数组成

分为取指令、解析指令和执行指令



上面是运算 3 + 14的指令执行情况,不断取指令、解析指令和执行指令,解析指令时候根据操作码操作数 知道,在那个位置进行什么操作,就这样不断的进行上面三步骤,知道取到指令为0就结束了,指令是由动作+操作对象组成,并且其cpu中只有指令,没有其他概念

编程语言(Program Language)

现在有 C / C++ 、Python、Java、Go等等这些高级语言进行编程

程序(Program)就是⼀组指令以及这组指令要处理的数据。

程序 = 指令 + 指令要处理的数据

由于计算机是指可以识别机器语言 (由0和1组成)的,可以使用机器语言进行编写是非常痛苦的,因为二进制编程比较麻烦,为了提高编程效率,最早就创建出了汇编语言 ,其实就是汇编语言和机器语言是一一对应的,但是相对于1、0这些数字,发明了一些更好记忆和理解的符号对应起来,像上面的LOAD_A、LOAD_B等等,编写完以后就要使用汇编器 将其翻译成机器语言,但是这样仍然不够高效,最终高级语言 诞生了,高级语言借助封装让编程变得容易一些,高级语言的一条语句往往对应多条指令

在Java中,System.out.println(''hello world")运行语句会先在JVM上面调用C++版本的函数,在调用操作系统的API,操作系统把字符串给驱动程序,最后程序控制硬件完成显示操作

操作系统(Operating System)

操作系统是计算机资源管理的统称,目前的操作系统有:Windows系列、Unix系列、Linux系列、Android系列、ios系列等等

操作系统:管理好所有硬件设备和给软件提供稳定的运行环境

进程/任务(Process/Task)

在计算机上运行起来的应用程序称为进程/任务

进程是操作系统对一个正在运行程序的抽象,并且进程是操作系统进行资源分配的基本单位(资源分配的最小单位)

操作系统对进程管理分为两个环节

1.描述

因为操作系统主要是C语言写的,因此这里通过一个结构体变量,描述出一个进程的所有属性,称为PCB(进程控制块)

2.组织

使用一定的数据结构将这么多的PCB连接起来,使用的数据结构为链表、搜索树等等

PCB介绍

PID进程标识符,是整数,进程开始时候操作系统自动分配的,并且相同时刻是不会出现相同的PID

并且像这些浏览器每一页都是一个单独的进程,都要有自己单独的PID

2.内存指针

进程在运行是需要内存的,并且在其内存存储 空间中有的部分是'指令 ',有的部分是'数据',通过内粗指针知道那个是指令,那个是数据
3.文件描述符表

一个进程想要读写文件,需要先打开,打开的时候就会在PCB中构建一个文件相关的结构体,放到PCB的文件描述符表
文件描述符表 中有很多的结构体,每一个结构体都有具体的文件信息,通过文件信息就可以知道文件在硬盘那个位置

进程调度

4 .进程状态

进程有很多状态,但是可以简短理解,将其分为两种 就绪和阻塞

" 就绪 "就是处于随叫随到

"阻塞" 状态一位置该进程无法参与到CPU调度执行上
5.进程的优先级

决定那个进程优先安排CPU资源,优先给重要的进程分配,相反不是特别重要的可以让其优先级低一点
6.进程的上下文

一个进程调度到CPU上执行,离开CPU过了一段时间可能还会回到CPU上接着之前的位置继续向下执行,像游戏的存档功能

在计算机中,CPU内部有很多的寄存器 用于保存一些程序运行的一些中间状态,有些寄存器还可以记录到指令执行到了哪一条了等等,记录一些有关"上下文"相关的东西,因此其进程在执行的时候,其寄存器是在不停的变化的

当进程离开时候,会将寄存器的值全部拷贝出来保存内存中,当进程又开始执行时候,将其拷贝的寄存器的值全部重新写入寄存器中
7.进程的记账信息

统计机制,统计进程在CPU运行了多久

因为进程的优先级问题,可能使某一个进程吃到的CPU资源非常少

因此可以通过记账信息识别出来,这样可以灵活调整,使其更好的分配资源

进程,多任务的计算机中,多进程是"并发编程" 解决方案,但是随着业务规模变大,一个服务器任务变多,有了更多进程,因此服务器会不断的 创建和销毁进程,这个过程是非常浪费时间的

线程

因为其进程没有办法解决这些问题,所以就有了线程

线程(Thread)也叫轻量级进程,线程的创建和销毁都要比进程低得多

进程包含了线程,进程是操作系统资源分配的基本单位

一个进程中有若干个线程,是可以共用操作系统的这些资源的,因此在同一个进程中的线程中共用PCB和内存指针和文件描述符表,但是其有各自的状态、上下文、优先级和记账信息等等

每一个线程都可以放到CPU上调度执行,线程是操作系统调度的基本单位

多进程的做法 ,就是在开辟一个空间,同时一人消灭50只

多线程的做法 :直接添加人

随着线程数目变多,其效率也会提高,但是当过多了,可能会降低效率

如果太多了效率可能会降低,并且因为其共用资源,因此可能会发生冲突,可能会影响整个进程中其他线程的运行,这时候就是线程冲突问题

进程和线程的区别

线程:轻量级进程,线程是操作系统调度执行的基本单位(最小单位)

进程:操作系统资源分配的基本单位(最小单位)

关系:一个线程包含多个线程

区别:

1.每一个进程有自己独立的资源,进程和进程之间不能共享;同一个进程中的线程之间,共享相同的资源

2.进程之间不会相互影响,同一个进程的线程挂了,可能会对其他线程有影响

3.进程是操作系统资源分配的最小单位,线程是操作系统调度执行的基本单位

4.因为线程资源共享,因此线程中特别容易出现资源访问冲突,进程中基本上不会出现

相关推荐
偷心伊普西隆2 小时前
Python Access:删除数据库中指定的表和查询
数据库·python
小蒜学长3 小时前
springboot基于BS的小区家政服务预约平台(代码+数据库+LW)
java·数据库·spring boot·后端
zhangfeng11335 小时前
生物信息 R语言和 cytoscape 相互沟通的组件RCy3,构建cytoscape网络表 节点类型表 链接边的表,并推送到cytoscape
数据库·r语言·生物信息
小森( ﹡ˆoˆ﹡ )5 小时前
GPT_Data_Processing_Tutorial
数据库·gpt·mysql
祈祷苍天赐我java之术5 小时前
Redis 热点数据与冷数据解析
java·redis·mybatis
krielwus5 小时前
Oracle Linux 7.8 静默安装 Oracle 11g R2 单机 ASM 详细教程
数据库·oracle
翔云1234566 小时前
向量数据库的几个核心概念
数据库
sniper_fandc6 小时前
关于Mybatis-Plus的insertOrUpdate()方法使用时的问题与解决—数值精度转化问题
java·前端·数据库·mybatisplus·主键id
lang201509286 小时前
MySQL在线DDL:零停机改表实战指南
数据库·mysql