浅析计算机是如何工作的


前言
计算机是如何工作的这件事情是复杂且有序的,是无法用一两篇文章就能讲述清楚的,所以在这里我只对大致的框架进行简单阐述。

*存储方式

1. 硬盘(Hard Disk Drive, HDD)

定义与功能:
硬盘是计算机系统中的主要外部存储设备,用于长期存储大量数据。它利用磁存储技术,在盘片上记录数据,并通过磁头读写数据。

特点:

存储容量大,可存储数十GB到数TB的数据。
访问速度相对较慢,因为数据需要通过机械臂移动磁头来定位。
数据持久化存储,即使断电也不会丢失数据。

工作原理:
硬盘通过磁粒子的极性来记录数据,磁头在读取数据时,将磁粒子的不同极性转换成不同的电脉冲信号,再通过数据转换器将这些原始信号转换成计算机可以使用的数据。写操作则与此相反。

2. 内存(Memory)

定义与功能:
内存(也称主存)是计算机系统中的临时存储设备,用于存储CPU正在处理的程序和数据。它是计算机性能的关键因素之一。

特点:

访问速度快,比硬盘快得多。
容量相对有限,但足以满足CPU的即时需求。
断电后数据会丢失,属于易失性存储器。
负责数据的快速存取。

类型:

随机存取存储器(RAM):分为静态RAM(SRAM)和动态RAM(DRAM),DRAM因其成本较低而广泛应用于计算机系统中。

3. 寄存器(Register)

定义与功能:
寄存器是CPU内部的高速存储部件,用于暂存数据和指令。它是计算机系统中速度最快的存储设备之一。

特点:

容量非常小,但访问速度极快。
直接与CPU进行数据交换,提高数据处理速度。
分为多种类型,如通用寄存器、指令寄存器、程序计数器等。

工作原理:
寄存器基于二进制数的存储和访问,每个存储单元都有一个唯一的地址编号。当CPU需要访问某个存储单元时,会向寄存器发出一个包含地址信息的指令。

4. 缓存(Cache)

定义与功能:
缓存是位于CPU和主存之间的一种高速存储器,用于存储CPU频繁访问的数据,以减少CPU访问主存的次数,从而提高数据访问速度

特点:

访问速度介于CPU和主存之间。
容量比主存小得多,但足以存储CPU频繁访问的数据。
分为一级缓存(L1 Cache)、二级缓存(L2 Cache) 等,越靠近CPU的缓存速度越快。

工作原理:
缓存基于局部性原理工作,即程序在执行过程中,对数据的访问往往呈现出时间局部性和空间局部性。当CPU访问数据时,会首先检查缓存中是否已有所需数据,如果有则直接从缓存中读取(缓存命中),否则从主存中读取并存储到缓存中(缓存未命中)

总结

硬盘、内存、寄存器和缓存共同构成了计算机系统的存储层次结构。它们各自具有不同的特点和功能,以满足计算机在处理数据时的不同需求。从速度上看,寄存器最快,其次是缓存、内存,最后是硬盘;从容量上看,则恰好相反。 这种存储层次结构的设计使得计算机能够在保证数据处理速度的同时,也能够存储大量的数据。

*CPU

1. 定义

CPU是一块超大规模的集成电路,通过在单个计算机芯片上放置数十亿个微型晶体管来构建。从物理上看,CPU的内部结构非常复杂,包含了大量的电子元件和连接线路。
CPU可以大致划分为三个主要模块:控制单元、运算单元和存储单元,这三部分通过CPU内部总线连接起来。

2. 控制单元(Control Unit, CU)

控制单元是整个CPU的指挥控制中心,负责协调计算机有序地工作。
它包含指令寄存器(IR)、指令译码器(ID)、操作控制器(OC)、时序发生器、程序计数器(PC)等部件。

3. 运算单元(Arithmetic Logic Unit, ALU)

运算单元是CPU的运算核心,负责执行各种算术运算(如加、减、乘、除)和逻辑运算(如与、或、非、移位等)。
它由算术逻辑单元(ALU)、累加器、数据缓冲寄存器、状态寄存器和通用寄存器组等组成。

4. 存储单元

存储单元包括CPU内部的缓存(Cache)和寄存器组,用于暂时存放数据。
寄存器组可分为专用寄存器和通用寄存器,它们分别用于存放特定的数据和参与运算的数据。

5. 程序在CPU上的执行

一、程序加载

在程序执行之前,它首先需要被加载到计算机的内存中。这是因为CPU无法直接从硬盘等存储设备中读取数据,而必须通过内存来访问数据和指令。一旦程序被加载到内存,它的每一条指令都会有一个唯一的内存地址。

二、CPU取指令

CPU通过程序计数器(Program Counter,PC)来跟踪下一条要执行的指令的内存地址。在每个时钟周期的开始,CPU会从内存中取出位于PC寄存器所指示地址的指令,并将其存储在指令寄存器(Instruction Register,IR)中。然后,CPU会自动将PC的值增加,以指向下一条指令的地址。

三、指令译码

CPU的指令译码器(Instruction Decoder)会对指令寄存器中的指令进行译码,以确定该指令的类型(如算术运算、逻辑运算、数据传输等)以及它所需的操作数。这一过程涉及对指令的二进制表示进行解码,以识别出指令的各个部分(如操作码和操作数)。

四、指令执行

一旦指令被译码,CPU就会根据指令的类型执行相应的操作。这可能涉及算术逻辑单元(ALU)进行算术或逻辑运算,或者涉及将数据从内存传输到寄存器,或从寄存器传输到内存等。在执行过程中,CPU可能会访问各种寄存器(如通用寄存器、特殊功能寄存器等)以获取操作数或存储结果。

五、存储结果

如果指令的执行产生了结果(如算术运算的结果),那么这些结果通常会被存储在寄存器中,以便后续指令使用。如果需要将结果输出到外部设备或保存到文件中,那么CPU会通过输出设备和内存来完成这一任务。

*操作系统

操作系统是一个大的话题,这里我只简单阐述应用程序是怎样通过操作系统对硬件设备进行控制的。

1. 操作系统内核

操作系统内核是操作系统的核心部分,它负责管理和控制计算机系统的所有硬件和软件资源。具体来说,内核的作用包括但不限于以下几个方面:

资源管理:内核负责管理计算机的硬件资源,如CPU、内存、磁盘、网络设备等,以及软件资源,如进程、线程、文件等。它确保这些资源被有效地分配和调度,以满足应用程序的需求。

进程管理:内核负责创建、调度、执行和终止进程。它维护进程的状态信息,如进程标识符、内存地址空间、文件描述符等,并确保进程间的隔离和通信。

内存管理:内核管理计算机的物理内存和虚拟内存。它负责内存的分配、回收、保护和映射,以确保应用程序能够安全、高效地访问内存。

文件管理:内核提供对文件系统的支持,包括文件的创建、读取、写入、删除和修改等操作。它维护文件系统的结构,确保数据的完整性和一致性。

设备管理:内核与计算机的硬件设备进行交互,管理设备的驱动程序和中断处理。它提供统一的接口,使应用程序能够访问和操作硬件设备。

内核的性能和稳定性对操作系统的整体性能有着至关重要的影响。一个高效、稳定的内核能够确保系统资源的有效利用,提高系统的响应速度和可靠性。

2. 用户接口

定义:用户接口是操作系统提供给用户的交互界面,包括:
命令行界面(CLI):如Windows的命令提示符(CMD)或Linux的终端(Terminal),用户通过输入命令来操作系统。
图形用户界面(GUI):如Windows的桌面环境,用户通过图形元素(如窗口、图标、菜单等)来与操作系统交互。

功能:用户接口允许用户通过键盘、鼠标等输入设备与系统进行交互,执行各种命令和操作。
作用:用户接口使得用户能够方便地执行各种操作,如启动应用程序、管理文件和设置系统参数等
实现:用户接口程序通常运行在用户态,通过调用系统调用来实现其功能。

3.系统调用接口

系统调用接口(System Call Interface)是操作系统内核提供的一组函数,用于实现操作系统为应用程序提供的服务。它是用户程序与操作系统内核之间的接口。

提供者:系统调用接口完全由操作系统内核提供。内核是操作系统的核心部分,负责管理计算机的硬件和软件资源,为上层应用程序提供运行环境。

功能:系统调用接口允许应用程序通过一组定义好的函数来请求操作系统内核提供的服务,如文件操作、进程控制、网络通信等。这些服务是操作系统内核的基本功能,通过系统调用接口暴露给上层应用程序使用。

4. 驱动程序

定义:驱动程序是操作系统与硬件设备之间的接口程序,用于控制和管理硬件设备。

职责:驱动程序隐藏了硬件设备的具体细节,并向操作系统提供了一套抽象的、通用的接口,使得操作系统能够方便地与硬件设备进行交互。

重要性:没有驱动程序,操作系统就无法识别和控制硬件设备,从而无法发挥其应有的功能。

5. 操作系统API

一、操作系统API的定义

API是一种预先定义的函数,旨在提供应用程序与开发人员基于某软件或某硬件访问一组例程的能力,而无需访问源码或理解内部工作机制细节。在操作系统中,API就是操作系统给应用程序的调用接口,应用程序通过调用操作系统的API来执行各种操作。

二、操作系统API的分类

操作系统API大致可以分为以下几类:

文件操作API:允许应用程序读取、写入和操作文件。例如,在C语言中,常见的文件操作API包括fopen()、fread()、fwrite()、fclose()等。

网络通信API:允许应用程序进行网络通信,如建立TCP/UDP连接、发送和接收数据等。例如,socket()、connect()、send()、recv()等函数就是用于网络通信的API。

进程和线程管理API:允许应用程序创建、控制和同步进程和线程。例如,在Unix-like系统中,fork()、exec()等函数用于创建进程,而在Windows系统中,CreateProcess()函数用于创建进程。线程管理API则包括pthread_create()(POSIX线程库)、CreateThread()(Windows线程API)等。

内存管理API:允许应用程序分配、释放和操作内存。例如,malloc()、free()、mmap()等函数就是用于内存管理的API。

同步和互斥API:允许应用程序在多线程环境中同步和互斥访问共享资源。例如,pthread_mutex_lock()、pthread_mutex_unlock()(POSIX线程库中的互斥锁操作),以及sem_wait()、sem_post()(POSIX信号量操作)等。

三、操作系统API的作用

提供标准化的接口:操作系统API为应用程序提供了标准化的接口,使得不同的应用程序能够以相同的方式与操作系统进行交互,从而提高了软件的可移植性和互操作性。
封装底层细节:操作系统API封装了底层的硬件和操作系统细节,使得应用程序开发者无需关心这些复杂的底层实现,而是可以专注于应用逻辑的实现。
提高开发效率:通过提供丰富的API函数库,操作系统API能够帮助开发者快速完成各种复杂的操作,从而提高了开发效率。

6. 交互流程(重点)

a. 用户通过用户接口操控应用程序

用户界面(UI)是用户与应用程序交互的媒介。用户通过图形界面、键盘、鼠标等设备输入指令或数据,这些指令或数据被应用程序的用户接口捕获并处理。

b. 应用程序通过API调用系统调用接口

应用程序内部会封装一系列的API,这些API为开发者提供了一种高级别的、易于使用的接口来执行特定的任务。当应用程序需要执行与操作系统相关的操作时(如文件读写、网络通信、进程管理等),它会通过调用相应的API来实现。
这些API在内部会进一步调用系统调用接口。系统调用接口是操作系统提供的一组函数,它们允许应用程序与操作系统内核进行交互。

c. 系统调用接口向操作系统内核发送请求

当应用程序通过API发起系统调用时,该调用会被传递给操作系统内核。内核会检查请求的合法性,并根据请求的类型和参数执行相应的操作。
系统调用是操作系统内核提供的接口,它们为应用程序提供了一种访问系统资源和服务的机制。

d. 操作系统调用驱动程序操控硬件

如果系统调用需要访问硬件设备(如磁盘、网络适配器、打印机等),操作系统内核会进一步调用相应的驱动程序。
驱动程序是控制和管理硬件设备的软件。它们为操作系统提供了与硬件设备进行交互的接口,使得操作系统能够识别、配置和控制硬件设备。
驱动程序接收来自操作系统内核的指令,并将这些指令转换为硬件设备能够理解的信号或命令,从而实现硬件设备的控制和管理。

e. 硬件执行操作并返回结果

硬件设备根据接收到的指令执行相应的操作,并将操作结果返回给驱动程序。
驱动程序将结果传递给操作系统内核,内核再将结果通过系统调用接口返回给应用程序。
应用程序通过其用户接口将结果展示给用户,完成整个交互流程。

这个过程展示了从用户输入到硬件响应的完整流程,涉及了用户接口、应用程序、API、系统调用接口、操作系统内核以及驱动程序等多个组件的协同工作。

*进程

1. 进程的定义

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。简而言之,进程是操作系统中进行资源分配和调度的一个独立运行的实体,它是应用程序运行的载体。

进程具有以下几个基本特征:

动态性:进程是程序的一次执行过程,是动态产生、变化和消亡的。动态性是进程最基本的特征。

并发性:多个进程可以在系统中并发执行,互不干扰。并发执行是指多个进程在同一时间间隔内同时运行,但在任一时刻点上只有一个进程在处理机上执行。“宏观上同时,微观上分隔。”

独立性进程是一个独立运行的实体,是系统进行资源分配和调度的一个独立单元。进程拥有独立的地址空间,进程间互不干扰

异步性由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

结构性:**进程由程序、数据和进程控制块三部分组成。**其中,程序描述了进程要完成的功能,数据是程序执行时所需要的信息,进程控制块(PCB)则包含了进程的描述信息和控制信息。

进程是操作系统中的一个核心概念,它使得多个程序能够并发执行,提高了计算机资源的利用率和系统的吞吐量。操作系统通过管理进程来协调计算机硬件和软件资源的使用,确保各个进程能够按照预定的方式执行,同时处理进程间的通信和同步等问题。

2. 进程控制块(PCB)

进程控制块(PCB,Process Control Block)是操作系统中用于描述和控制进程运行的数据结构。它包含了操作系统管理进程所需的全部信息,是系统感知进程存在的唯一标志。PCB的内容可以大致分为以下几个方面:

一、进程标识符
进程标识符(PID):唯一标识一个进程,通常是一个整数。它是系统分配给每个进程的唯一编号,用于区分不同的进程。

二、处理机状态信息

程序计数器:指示下一条将要执行的指令的地址,也称为指令计数器,用于记录进程当前执行的指令地址。当进程被中断时,程序计数器的值会被保存,以便进程恢复执行时从中断点继续执行。

CPU寄存器:保存进程的CPU寄存器状态,如通用寄存器、指令寄存器(IR)、程序状态字(PSW)等。这些寄存器在进程切换时会被保存和恢复,以保证进程的正确执行。

用户栈指针:指向用户栈的栈顶,用于保存局部变量、函数参数等信息。

三、进程调度信息

进程状态:表示进程当前所处的状态,如新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)等。

优先级:表示进程被调度的优先级,优先级高的进程更有可能被系统选中执行。

调度策略:表示进程调度的策略,如轮转调度(Round Robin)、先来先服务(FCFS)、优先级调度等。

等待事件:如果进程处于阻塞状态,则等待事件表示进程正在等待的事件类型,如I/O操作完成、信号量等。

四、进程控制信息

程序和数据地址:指向进程的程序和数据在内存中的地址(内存指针),以便系统能够找到并执行进程的代码和数据。

资源清单:列出进程所占用的资源,如打开的文件、I/O设备等。

进程间通信和同步机制:包括消息队列、信号量、管道等机制,用于实现进程间的通信和同步。

链接指针:指向其他PCB的指针,用于将PCB组织成链表或树形结构,以便系统能够方便地管理和调度进程。

五、其他信息
会计信息:如CPU使用时间、实际时间等,用于统计进程的运行情况。
输入输出状态:表示进程与I/O设备之间的连接状态和传输情况。

3. 进程与PCB的关系

一、PCB是进程存在的唯一标识

PCB是操作系统中最重要的记录型数据结构,用于描述和控制进程的运行。它是进程实体的一部分,系统能且只能通过PCB对进程进行控制和调度。
PCB随进程的创建而产生,在进程执行的过程中动态地记录进程各信息的变化。当一个进程完成其功能后,系统则回收PCB,进程也随之消失。因此,PCB是进程存在的唯一标志。(来源:百度教育)

二、PCB记录了进程上下文信息

PCB记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。这些信息包括但不限于:
进程标识符,处理机状态信息,进程调度信息,进程控制信息·····,这些信息构成了进程的上下文信息,在进程切换和并发中有着重要作用。

三、PCB支持进程的调度和管理

通过PCB,操作系统可以方便地获取进程的当前状态、优先级等信息,从而进行进程的调度和管理。例如,系统可以根据PCB中的进程状态信息,将处于就绪状态的进程按照优先级高低排列在就绪队列中,等待CPU的分配。
当进程因某种原因被阻塞时,操作系统会将进程的PCB放入相应的阻塞队列中,并在阻塞原因消除后将进程重新唤醒并放入就绪队列中。

四、PCB的组织方式

多个PCB可以通过链接字段链接成队列,以便系统根据进程的状态进行管理和调度。常见的队列包括就绪队列、阻塞队列等。
系统还可以根据所有进程的状态建立索引表(如就绪索引表、阻塞索引表等),并在每个索引表的表目中记录具有相应状态的某个PCB在PCB表中的地址。这样可以进一步提高系统的管理和调度效率

综上所述,PCB与进程之间存在着密不可分的关系。PCB是进程存在的唯一标识和描述进程运行状态的重要数据结构,它支持着操作系统的进程调度和管理功能。当一个程序开始运行时,这个程序的指令和依赖的数据就会从硬盘中加载到内存中,程序中各个进程就会产生对应的PCB结构并以链表方式链接成队列,PCB的内存指针会指向这些指令和数据,以便操作系统能快速找到和执行程序的代码。当进程切换时,PCB会保存进程的上下文信息,以便下一次循环时该进程能继续执行

以上算是对计算机是如何工作的作出了一些简单的概括,如有不对的地方欢迎私信我或者在评论区留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值