计算机工作原理(简单介绍)
计算机基础
- 冯诺依曼体系
- 指令(Instruction)
- 编程语言(Program Language)
- 操作系统(Operating System)
- 进程调度
- 线程
- 进程和线程的区别
计算的需求是人类一直都需要的,从最初的计算工具到机械计算机到目前的电子计算机的发展过程,追求更快速、更稳定、更微型
冯诺依曼体系
约翰·冯·诺依曼(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.因为线程资源共享,因此线程中特别容易出现资源访问冲突,进程中基本上不会出现