计算机是怎么组成的

cpu

1.cpu架构

x86:  intel armd 家用pc

arm:苹果 高通  苹果电脑  智能手机

不同架构指令集不同

学校学的指令集一般是8086这款cpu,8086是intel一款16位cup,为x86架构

但现在的电脑一般是64位,但64位的windows系统可以兼容32位。

不同位数,对应的地址大小不同。

例如

int *p=NULL;

printf("%d",sizeof(p));

在16位cpu下,结果为2;

32位cpu下,结果为4,

64位cpu,结果为8.

指令集,或者叫做汇编,主要是用来病毒和外挂,以及各种底层操作。

例如外挂,就是从游戏对应的指令中,找到对应要进行修改的功能(例如透视对应的是光线判定),然后通过外挂程序,把原有的判定的逻辑修改。

2.cpu是怎么构成的

门电路->半加器->全加器->加法器->ALU运算器->差不多构成cpu

cpu构成涉及的课程很多,包括但不限于大学物理,模电,计组,计算机系统,微机原理与接口技术.....,而且还需要很高的数学功底。

所以说设计cpu的大佬都很nb。

cpu一般越小,集成程度越高,对应的算力越强。

但cpu不能无限小,太小的话,分子的无规则运动就要考虑进来了,就要考虑量子力学了。

既然cpu不能无限小,那么可以无限大吗?

cpu太大的话,加工的良品率会大幅度下降。

既然变大变小都不行,那么可以在数量上取胜,即为“多核cpu”,但多核cpu也是一个cpu,只是一个cpu上有多个核心,但为了合理调度多个核心,需要软件的配合,软件上就引入了“并发编程”,

后来又发现,一个核心可以当两个核心使用,即为“超线程技术”,例如一个有4个核心的cpu,一个当两个使用后,就有了8个核心,我们把实际的核心叫做“物理核心”,使用的核心叫做“逻辑核心”,在实际使用时,只是看逻辑核心的数量,但在intel13代时,引入了大小核,只有大核心配有超线程技术。

3.cpu工作速度

频率  描述单个cpu核心工作的速度,一般以Hz为单位,1 kHz=1024Hz,1MHz=1024KHz,1GHz=1024MHz,例如1.9GHz就是一秒钟进行了19亿次计算,现在还引入了睿频技术,就是cpu频率动态变化,更加节能,现在cpu既有基础频率(下限),还有最大睿频(上限)。

4.cpu指令执行过程

cup要执行指令,要先从内存中取指令,然后解析指令(用指令表查询指令),最后才执行指令。

简单的指令表例子:

注意,前文提到在不同架构下,指令表不同,这是以X86为例子。

LOAD_A 将RAM的指定地址的数据加载到A寄存器,opcode为0010,后面有一个四位的地址参数

LOAD_B 将RAM的指定地址的数据加载到B寄存器,opcode为0001,后面有一个四位的地址参数

STORE_A  将数据从A寄存器写入RAM的指定地址,opcode为0100,后面有一个四位的地址参数

ADD  计算两个指定寄存器的数据的和,并将结果放入第二个寄存器,opcode为1000,后面为两位的寄存器ID1,和两位的寄存器ID2,A寄存器ID为00,B寄存器为01。

以前的指令是从内存中取出来,然后让cpu执行(冯诺依曼体系结构),但随着cpu执行速度越来越快,从内存中取指令的速度远远跟不上cpu执行速度了,为了缓解这个问题,现在的cpu上配有缓存,即从内存中取出很多指令,存到缓存中,然后让cpu执行,缓解了不同步的问题。

操作系统

1.操作系统作用

首先,操作系统是一个软件,其主要职责有1.管理各种硬件设备,2.给其他软件提供稳定的运行环境。

常见的系统有:

1.Windows

2.Linux

3.Mac

4.IOS

5.Android

因为现在的电脑上有许多硬件设备,例如硬盘,鼠标,音响等,这些硬件来自不同厂家,这需要操作系统来统一它们。这样我们就不需要面向硬件编码,只需要面向不同的操作系统就行了。软件也是如此,都让操作系统统一管理。

而每个软件在运行时都会产生进程,计算机会为每个进程分配一定的系统资源,进程是系统分配资源的基本单位。

操作系统中的进程管理:

1.先描述

使用类或结构体这样的方式,把实体属性给列出来。

2.再组织

使用一定的数据结构,把这些结构体或对象串到一起。例如再Linux中,就是通过链表把它们串起来。比如我们查看任务时,就相当于遍历链表并打印出来。

2.PCB(进程控制块)属性

软件在操作系统中,是以进程为单位来分配资源和调度的,所以了解进程对了解操作系统十分重要。

1.pid : 进程的身份标识,用一个不重复的整数表示,操作系统会保证同一时间,同一机器,身份标识是唯一的。

2.内存指针

进程运行过程中,需要消耗一些系统资源,内存就是一种重要的资源。每个进程必须使用自己申请到的内存,进程运行时,需要有指令和数据,这些都需要加载到内存中,指令和数据要在进程运行前加载到内存中,外挂往往就在加载过程中动手脚,

3.文件描述符表

进程要经常访问硬盘,而操作系统对于硬盘这样的设备,进行了封装-->文件(先描述)。文件描述符表就包含了进程使用的硬盘的相关信息。

与PCB调度有关的属性

4.进程的状态

描述某个进程是否可以去cpu上运行,比如某个进程中Scanner等待用户输入,

进程状态有:1.就绪状态:只需要cpu就可以运行。2.阻塞状态:进程在等待系统资源,如IO设备等。

5.进程的优先级

多个进程等待调度,可以通过多种算法来设置优先级,有的算法适合小任务,有的适合大任务,有的两者兼顾。

6.记账信息

记录进程使用的cpu的时间,内存大小信息等。

7.上下文

支撑进程调度的重要属性,相当于游戏中的存档和读档。保存上下文就是把cpu的关键寄存器中的数据,保存到内存中,恢复上下文就是把内存关键寄存器中的数据恢复到cpu对应的寄存器中。

8.进程间的通信

虽然进程是独立的,但为了完成某个任务,有时候需要多个进程相互配合,这时,操作系统会提供一些公共的空间(多个进程都可以访问到),让进程通过公共空间来交互数据。

3.线程

1.简单介绍一下线程

虽然进程的提出已经很好的解决了多任务的问题,但在有些场景下,比如频繁创建和销毁进程时,这时使用多进程编程,系统开销就会很大,因为在创建进程时,系统要为它找到一块大小合适的内存,这是很费时的,而且如果找不到合适大小的内存,系统会报错(Windows由于采用“分时复用”,出现这种情况的概率很小,但Linux上出现的概率更大一些)。而线程就是来解决上述问题的,线程,可以视为轻量化进程,保持了独立调度执行,即支持并发,又省去了“分配资源”和“释放资源”这种额外的开销。

1.线程如何省去额外开销

因为线程不同于进程,多个线程的内存指针是指向同一块内存空间的,这就意味着,只需要在创建第一个线程从系统分配资源时就行了,后续的线程直接共享这份资源就行了,除了内存,文件描述符也是共享的。

但也不是随便两个线程就能实现资源共享,我们把可以共享资源的线程称为一个线程组,每个进程都包含了一个或多个线程,在有线程之前,进程即需要资源分配,又需要进行调度执行,而有了线程后,进程就只需要资源分配,调度执行就交给了线程,但同一个进程中能过多的加入线程,因为cpu的核心是有限的,而且过多的线程会起冲突,可能导致一些逻辑上的错误。

2.进程和线程的区别

1.进程是包含线程的。

2.每个线程也是独立的执行流,可以执行一些代码,可以单独参与到cpu调度中。

3.每个进程,有自己的资源,进程中的线程公用这一份资源。所以说,进程是资源分配的基本单位,线程是调度执行的基本单位。

4.进程和线程之间,不会相互影响,如果同一个进程中的线程抛出了异常,可能会影响到其他线程,会把整个进程中的所有线程都异常终止。也就是说,同一个进程中的线程可能会相互干扰,引起线程安全问题。

5.线程不是越多越好,如果线程太多,调度开销可能非常明显。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值