计算机是如何工作的

1. java起源和发展历程

Java诞生于上世纪90年代,当时C/C++是主流语言,詹姆斯高斯林,最初他们公司要搞"智能面包机"这样的产品,首选C++,当时公司里大家是新人,高斯林怕大家搞不定就自己搞了一个语言Oak(橡树,工位窗外有一颗橡树),最后项目流产了,但语言挺好保留了下来,但Oak的商标被注册了,改为java(爪哇岛产的咖啡)logo是一杯咖啡。

詹姆斯高斯林 java的logo

  • Java最开始起飞,用来开发前端程序,好景不长被微软封杀(IE浏览器不再支持java,微软转为扶持政自己的j++,之后java兵分两路:

    1.后端开发/服务器开发

    最初服务器后端使用C/C++开发,2000年之后,PHP突起,一下子变为后端开发最主流语言。java搞了一套JSP技术系统,虽然干不过PHP但也有一席之地

    2.手机端开发(2000左右 功能机)

    java推出J2ME,打开一些应用程序尤其是游戏,加载界面都是java logo

    Java凭借以上两点,不光站稳了脚跟,同时也成为了业界最主流的编程语言之一。

  • 好景不长,新的危机又出现了

    1. 后端开发方面

    PHP这一套开发方式,针对简单的网站绰绰有余,网站越来越复杂,PHP难以应对,JSP面临同样的问题

    1. 手机开发方面

    2007年是一个惊天动地的一年,乔布斯发布了苹果手机(移动互联网时代,智能手机登场)传统功能机一夜暴死,J2ME市场没了

    应对危机

    1.后端开发方面

    Spring开始崛起(Spring在JSP时代就有)

    以Spring为首的一系列框架

    开启了服务器开发新纪元,反超PHP成功,java成为后端开发最强语言

    1. 移动端方面

    IOS系统

    使用的语言 Objective---C,介于C和C++之间

    Android(谷歌)

龟叔

  • 最早考虑的是Phyon作为开发语言,Phyon作者龟叔本来是谷歌员工,这段时间闹着离职,Phon错过这次机会,java抓住了

  • 之前那一波做手机开发的,就是java程序员,是得Android快速发展起来

    系统要发展 ---> 有很多好用的程序员 ---> 优秀的开发者 ---> 吸引更多的用户 ---> 有很多好用的程序

    安卓很快超过IOS,称为智能手机端最强系统

    上述两波操作,java一跃而起,编程语言排行榜榜一大哥,一直垄断多年(近几年开始被其他语言反超)

  • Java近几年也遇到了新的挑战

    1. 后台开发

    java最大的挑战者 Golang (java追求呆板,比较麻烦)

肯汤姆逊

  • Golang是出名门,肯汤姆逊(C语言之父),C语言原版人马打造

    1. 移动端

    java安卓开发,最大的挑战者是前端

    IOS是一个语言,安卓是一个语言,能否一套代码,写的程序同时支持多个平台

    前端方向有很多技术体系在做

    最近这几年AI浪潮把Phyon,C++又推起来了,(AI核心是C++写,C++提供一些API给Phyon调用写应用)AI的特特点,计算量非常大,消耗时间非常大,对于性能要求很高,甚至要调用GPU进行并行计算

2. 一台计算机的构成元素

CPU 电脑上最核心部分

中央处理器

计算机进行各种算术运算,逻辑判断,都是CPU负责(代码里写的内容都是CPU运行)

CPU是人类科技的巅峰之作,和CPU齐名的是氢弹,虽然表面笑,内部结构非常复杂,复杂到量子力学尺度

主板(就是一个大插座)

内存

存储数据的主要模块,统称为存储器

硬盘

存储数据的主要模块,统称为存储器

电源

散热器

机箱

显卡

GPU

显卡,GPU,CPU都输很相似的,都进行算数运算和逻辑判断

CPU是一个大学是,能算1+1,也能算微积分

GPU是一组小学生,只能算1+1,算不了微积分,但算的速度快

GPU用来处理运算简单,但运算量很大的场景

1.图形渲染

2.挖矿(加密货币)

3.AI 人工智能

冯诺依曼体系

冯诺依曼

  1. CPU

2.存储器

3.输入设备

4.输出设备

内存和硬盘

1.内训访问速度快,硬盘速度慢

2.内存空间小,硬盘空间大

3.内存成本高,硬盘成本低

4.内存数据掉电后都是,硬盘不丢失

输入和输出

站在CPU的角度看

输入:数据从外界"流入"CPU,是它接收的一切指令与信息。

输出:计算结果从CPU"流出",是它对外界的反馈与响应。

简单说:进CPU的是输入,出CPU的是输出。

输入设备:键盘、鼠标、麦克风...

输出设备:显示屏、投影仪、打印机...

既属于输入也属于输出:显示屏、网卡...

CPU主要关系指标

cpu频率

基本速度--->基频/默频

速度--->睿频/加速频率

G相当于10^9 10亿

HZ表示一秒多少次

现代CPU的一个特性,动态根据当前的任务量,频率变更

CPU核心数

最开始的CPU是单核的,努力提高xpu频率,但有上限

8核 16线程

8个物理核心,16个逻辑核心(能同时干16个活)

CPU核心越多,干活效率越高

程序员写代码的时候,就需要把任务拆分多个部分

CPU执行程序(指令)的过程

指令表

一段指令由操作吗和操作位数构成

CPU寄存器

一个CPU不止一个寄存器,大概有几十个

寄存器也是存储数据的模块,是长在CPU身上的,CPU存储数据就是通过寄存器

CPU寄存器,访问速度比内存还要快,存储空间比内存小跟多,成本也更高

CPU寄存器主要是在CPU执行指令,进行各种运算的时候,存储临时数据,起到一些辅助作用

理解一段指令如何执行

CPU执行指令过程

1.读取指令

2.解析指令

3.执行指令

3. 操作系统

Windows 10/11

Linux:在程序员圈子里很重要,后端开发服务器使用的系统一般都是Linux

Mac OS:苹果电脑上的系统

IOS:苹果手机系统,和MacOS不一样

Android:当前市场上最多的系统

上述系统批次之间是不兼容的

写一份java代码,不用做任何修改,就可以拿到另外一个系统上完成一样的功能

操作系统是一个搞管理的软件

1.管理各种硬件设备

系统通常会内置一些常用的驱动程序

操作系统通过驱动程序,间接的管理硬件设备

2.给各种应用系统,提供一个稳定的运行环境 这些应用程序在工作过程中,是互不干扰的,不影响其他应用程序运行

进程

一个运行起来的程序,就称为进程

站在操作系统的视角如何管理进程

1.先描述一个进程是啥样

使用结构体,描述出进程的核心属性

进程控制块(PCB)

非常大的结构体,有很多属性

2.再把多个进程组织起来

比如,Linux操作系统使用链表这样的形式,把多个PCB串到一起

创建一个进程:创建一个PCB,初始化PCB上的各个属性,把PCB加到链表上

销毁一个进程:把这个进程的PCB在链表上找到,并且从链表上删除

查看进程列表:遍历链表,取出链表上的每一个元素,把里面的一些关键元素显示到界面上

PCB中的一些关键要点

1.pid(进程id) 进程的身份标识符

2.内存指针(一组指针)

可执行文件(保存在硬盘上的一段数据)包含执行指令(二进制)和指令运行过程中依赖的数据

进程就需要知道要执行的指令在哪里,指令依赖数据在哪里

进程运行的过程中,需要依赖内存资源

3.文件描述表

进程运行过程中,很多时候需要和硬盘这个硬件设备进行交互,硬盘上的数据就是以文件的形式组织起来

进程在读写文件的时候,就需要先"打开文件"

每次打开一个文件,机会把这个文件的信息保存到文件描述表中,表中的每一个项,就对应着一个打开了的文件

操作系统中,会把很多资源,抽象成文件来表示,不一定是硬盘上的文件

操作系统管理网卡到时候,就是当做"文件"一样来管理

进程是操作系统中,资源分配的基本单位

操作系统如何进行多个进程

早期的计算机,操作系统是单任务操作系统

同一时刻,只能运行一个进程,要想运行下一个进程,就得结束上一个进程

多任务操作系统(在有多核处理器之前,多任务系统已经有了)

即使cpu只有一个核心,也能同时运行多个进程

分复使用把一个单位时间,分成很多份

第一份:进行进程1的指令

第二份:进行进程2的指令

......

cpu运行速度足够快,上述切换功能,也会非常快,快到超出人类的反应瞬间

使人看起来感觉好像这些进程在'同时进行'一样

把一个CPU核心上,按照分时复用,执行多个进程这样的方式,称为'并发执行',人看起来是同时执行,微观上,其实是一个CPU在串行执行,切换速度极快

把多个CPU核心上,同时执行多个进程这样的方式,称为'并行执行'

现代CPU在运行这些进程的时候,并行和并发是同时存在的

这些同称为并发

4.进程状态

就绪状态:进程可以随时到cpu上进行执行

阻塞状态:进程当前不适合到cpu上执行

5.进程优先级

有些进程,就是要优先级更高一些,吃到更多的cpu资源

6.进程的上下级

进程调度,一个执行一会,市区cpu,过了一段时间之后,进程还会到cpu上执行

沿着上次执行到的状态,继续往下执行(而不是重头执行)

进程在cpu中运行的过程中,cpu上各种寄存器,就表示了当前进程运行的'中间状态'

保存上下文:把CPU中的这些寄存器的值,保存到内存中

恢复上下文:把PCB中刚才保存的属性,填写回对应的寄存器中

7.进程的记账信息

估计功能,统计每个进程都在CPU上运行了多久

如果发现某个进程,好久没有吃到资源了,就会给这个进程倾斜一些资源

      1. 7 叫做进程调度
相关推荐
Predestination王瀞潞2 小时前
Java EE3-我独自整合(第七章:Spring AOP 通知类型)
python·spring·java-ee
XiYang-DING4 小时前
【Java EE】多线程(1)
java·python·java-ee
缪懿6 小时前
javaEE:文件IO
java·java-ee
Predestination王瀞潞8 小时前
Java EE3-我独自整合(第六章:Spring AOP 工作流程与切入点表达式)
java·spring·java-ee
我命由我123459 小时前
Android 开发,getSystemService 警告信息:Must be one of: Context. POWER_SERVICE ...
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
隐退山林10 小时前
JavaEE进阶:SpirngMVC入门(2)
java·java-ee
隐退山林1 天前
JavaEE进阶:Spring Web MVC入门(1)
前端·spring·java-ee
阿拉金alakin2 天前
深入理解 Java 线程池:核心参数、工作流程与常用创建方式
java·开发语言·java-ee
Paxon Zhang2 天前
JavaEE初阶学习web开发的第一步**计算机组成原理,操作系统,进程(基础扫盲)**
java·后端·学习·java-ee