Linux:冯诺依曼体系结构、利用系统、历程概念(一.初识历程)
1.冯诺依曼体系结构
冯诺依曼体系结构是计算机体系结构中的一种基本设计原则,它描述了计算机系统的组成和运作方式。该体系结构由计算机科学家约翰·冯·诺伊曼(John von Neumann)于20世纪中期提出,被广泛应用于现代计算机系统的设计和实现中。
冯诺依曼体系结构包括以下几个关键组成部分:
[*]存储器(Memory):冯诺依曼体系结构中的存储器用于存储指令和数据。这里的存储器通常指的是内存,包括随机存储器(RAM)和只读存储器(ROM)。存储器中的数据可以根据地址进行读取和写入利用。
[*]中央处置惩罚器(CPU):CPU是计算机的核心部件,负责执行指令并处置惩罚数据。CPU包括运算器(Arithmetic Logic Unit,ALU)和控制器(Control Unit)。运算器执行算术和逻辑运算,而控制器负责指挥数据的流动和执行指令的顺序。
[*]输入/输出设备(Input/Output Devices):输入/输出设备用于与外部世界交互,包括键盘、鼠标、显示器、打印机等。在冯诺依曼体系结构中,所有的输入和输出都通过存储器进行通报,即输入设备将数据写入内存,输出设备从内存读取数据。
[*]存储器-中央处置惩罚器之间的数据传输通路:冯诺依曼体系结构中,存储器和中央处置惩罚器之间有一条数据总线(Data Bus)和一条地址总线(Address Bus),用于传输数据和地址信息。
https://img-blog.csdnimg.cn/direct/323b39208dd344a5826e894ca78b8cc2.png
总线与数据传输通路
在计算机系统中,各个设备之间通过总线毗连在主板上。总线是一组电子管道或毗连,它允许数据在设备之间传输,以及设备与 CPU 或内存之间进行通讯。总线可以传输各种类型的数据,包括指令、地址和数据。
设备之间的数据流动本质是数据在差别设备之间往返拷贝,拷贝的整体速度是决定计算机效率的重要指标
总线的作用是将计算机中的各种硬件设备毗连起来,使它们可以相互通讯和协作。通过总线,CPU 可以访问内存中的数据和指令,外部设备(如键盘、鼠标、硬盘等)可以与 CPU 或内存进行数据交换。
总线通常分为三种类型:地址总线、数据总线和控制总线。
[*] 地址总线(Address Bus):用于指示数据在内存或 I/O 设备中的位置。地址总线的宽度决定了系统可以寻址的内存空间巨细。比方,32位地址总线可以寻址 2^32 个差别的内存单位,即 4GB 的内存空间。
[*] 数据总线(Data Bus):用于在 CPU、内存和 I/O 设备之间传输数据。数据总线的宽度决定了系统一次可以传输的数据位数。比方,32位数据总线可以一次传输 32 位(4 字节)的数据。
[*] 控制总线(Control Bus):用于控制数据的传输和利用。控制总线包括各种控制信号,如读写信号、时钟信号、停止信号等,用于指示数据传输的方向和时序。
总线毗连在主板上,通过电路板上的导线和毗连器进行物理毗连。当 CPU 或其他设备需要访问内存或进行数据交换时,它们会通过总线发送相应的控制信号和数据,然后在目的设备上进行处置惩罚或存储。
[*]数据传输通路:
[*]数据传输通路通常指的是在芯片内部或芯片之间的数据传输路径,它们可以是在 CPU 芯片内部的各种通路,也可以是毗连芯片之间的内部通路,好比毗连 CPU 和内存、毗连 CPU 和缓存等。数据传输通路的重要特点是速度非常快,因为它们通常是直接毗连在芯片内部或精密毗连的芯片之间,以是传输速度非常高。
[*]总线:
[*]总线是计算机系统中差别组件之间进行数据传输的通道。它是毗连 CPU、内存、输入输出设备和其他部件的物理通道,用于在它们之间传输数据和控制信号。总线分为地址总线、数据总线和控制总线三种,其中地址总线用于指示数据的存储位置,数据总线用于传输实际的数据,控制总线用于控制数据传输的时序和流向。总线的重要特点是它毗连了整个计算机系统的各个部件,因此它的带宽和传输速度通常比较有限,而且需要思量更多的时序和控制题目。
为什么有内存这个部分
[*] 平衡速度差别:CPU 的速度远远快于外部设备,如硬盘、光驱等。内存作为介于CPU和外部设备之间的前言,可以帮助平衡这种速度差别。CPU 可以快速地从内存中读取或写入数据,而内存则可以暂时存储来自外部设备的数据,使得 CPU 不必等待外部设备完成读写利用。
[*] 提高效率: 内存的引入使得计算机的运行更加高效。CPU 可以直接从内存中读取数据进行运算,而无需每次都去访问外部设备。如允许以大大提高数据访问速度,加速计算机的响应速度,提高整体性能。
[*] 缓存作用: 内存可以看作是一个非常大的缓存,存储了 CPU 需要频仍访问的数据和程序。通过在内存中暂时存储数据,可以减少 CPU 对外部设备的访问次数,提高计算机系统的效率。
[*] 低落资本: 内存的资本相对于 CPU 来说比较低廉,这使得计算机更加实用和经济。如果没有内存,CPU 将不得不直接与外部设备进行交互,这不但会低落计算机的性能,还会增长硬件资本,使得计算机变得更加昂贵。
[*]外设(输入或输出设备)要输入大概输出数据,也只能写入内存大概从内存中读取。
[*]所有设备都只能直接和内存打交道
[*]所有程序运行前都要先加载到内存里
计算机存储结构
https://img-blog.csdnimg.cn/direct/09cd61a3b68d4d7ca70f5038221186c3.png
[*] CPU 寄存器(Registers):
[*]生存来自高速缓存(Cache)的字。
[*]最小、最快、最贵的存储设备,通常位于 CPU 内部。
[*] 高速缓存(Cache):
[*]芯片内的缓存,生存来自芯片外缓存的缓存行。
[*]包括芯片内高速缓存和芯片外高速缓存(如 SRAM、DRAM)。
[*]提供比主存储器更快的访问速度,用于加速对常用数据和指令的访问。
[*] 主存储器(Main Memory):
[*]生存来自外部存储器(如磁盘、光盘、固态硬盘)的文件。
[*]包括随机访问存储器(RAM)和只读存储器(ROM)。
[*]速度介于高速缓存和外部存储器之间,代价适中。
[*] 外部存储器(External Storage):
[*]包括磁盘、光盘、固态硬盘(如 Flash、PROM、EPROM、E2PROM)等。
[*]生存大量数据和文件,但访问速度相对较慢,代价相对较低。
[*]提供恒久存储和备份的功能,但通常不得当频仍的读写利用。
[*] 远程二级存储(Remote Secondary Storage):
[*]包括分布式文件系统、Web 服务器等。
[*]提供远程存储和共享的功能,通常用于跨网络访问和备份数据。
以是,我们上面看到的存储器是特指主存储器——内存
计算机中不止有内存能存储。内存是计算机中用于临时存储数据和程序的一种存储介质,用于存储当前正在运行的程序和数据,是CPU可以或许直接访问的存储设备
2.利用系统(Operator System)
2.1 概念
利用系统(Operating System,简称OS)是一种系统软件,它负责管理和控制计算机硬件资源,并为应用程序提供运行情况的软件集合
[*]利用系统就是一个软件,是第一个被加载的软件
[*]负责管理计算机的软硬件资源,并为用户程序提供执行情况
https://img-blog.csdnimg.cn/direct/98f1bac4fcf5498286973c9dcc40c4ff.png
2.2 设计OS的目的
[*] 与硬件交互:利用系统需要与计算机硬件交互,控制和管理硬件资源的利用。
[*] 管理软硬件资源:利用系统管理计算机的所有软硬件资源,包括处置惩罚器、内存、文件系统、输入输出设备等。
[*] 为用户程序提供执行情况:利用系统提供一个良好的执行情况,利用户程序可以或许在计算机上运行并相互协作
对下管理好软硬件资源 ---- 手段
对上提供一个良好的运行情况 ---- 目的(还是要让我们用户本身用的舒服,如果没有利用系统帮我们,那什么都要本身来弄)
2.3 明白“管理”
我们能下如许一个界说:
在整个计算机软硬件架构中,利用系统的定位是一款纯正的“搞管理”的软件。它不但仅是一个程序集合,更是一个管理计算机系统的核心。
先聚焦于管理硬件部分:
https://img-blog.csdnimg.cn/direct/0cf7aeb5533d488ebf891fc70da55f37.png
利用系统、驱动程序和底层硬件之间的关系可以简单描述为:利用系统通过驱动程序与底层硬件进行交互和控制。
[*] 利用系统:利用系统是计算机系统中的核心软件,负责管理计算机的资源、提供用户界面、执行程序和控制外部设备等。利用系统通过提供各种服务和接口,使应用程序可以或许在计算机上运行并与硬件设备进行交互。
[*] 驱动程序:驱动程序是一种软件,用于与特定硬件设备进行通讯和控制。驱动程序通常由硬件制造商提供,通过利用系统的驱动程序接口(API)与利用系统进行交互。当利用系统需要与某个硬件设备通讯时,会调用相应的驱动程序来完成这些利用。
[*] 底层硬件:底层硬件是指计算机系统中的物理设备,如处置惩罚器、内存、硬盘、显卡、网卡等。这些硬件设备是计算机系统的基础,利用系统和应用程序需要通过驱动程序来与这些硬件设备进行通讯和控制。
利用系统通过驱动程序来管理和控制底层硬件,使得应用程序可以方便地访问和利用硬件设备。驱动程序充当了利用系统与硬件之间的桥梁,帮助利用系统实现对硬件设备的有效管理和控制。
先描述再组织
"管理"指的是利用系统对计算机系统中的各种资源进行组织、分配、调治和控制,以实现有效的资源利用和系统运行。
对于硬件的管理本质上就是一个先描述再组织的过程。
[*]描述:结构体进行描述 (界说一个struct啊,里面放属性)
[*]组织:利用数据结构进行组织(好比把各种硬件的struct放在链表里,如允许以历程查找,利用)
[*] 描述被管理对象
被利用系统管理的对象包括历程、内存、文件和硬件设备。这些对象在利用系统中通过数据结构来进行描述和组织。
[*] 组织被管理对象
利用系统通过利用数据结构如结构体、链表等来组织被管理对象,以便对其进行管理和利用。
不只是硬件部分利用了这种思想,后面历程部分的内容也会用到如许的的思想
2.4 用户利用
https://img-blog.csdnimg.cn/direct/efd11397cf1d4f679c7ff39c6d76d417.png
利用系统要给用户提供提供一个良好的运行情况:稳定,高效,安全
为了保证这些,利用系统就不能直接让用户访问内部所有数据。
用户利用接口的存在正是为了限制用户对内部数据的直接访问,并为用户提供一种安全、稳定且易于利用的方式与利用系统进行交互
系统调用接口是利用系统提供给用户程序的一组函数或方法,用于让用户程序可以或许哀求利用系统提供的各种服务和资源。系统调用接口允许用户程序在运行过程中向利用系统发出哀求,以便执行特权利用或访问受掩护资源(也是利用系统提供给我们用户来访问调用数据资源的方式)
通过限制用户对内部数据的直接访问,并提供用户利用接口和系统调用接口,利用系统可以有效地保证系统的稳定性、高效性和安全性
系统调用和库函数(lib)概念
利用系统通过暴露系统调用接口给用户程序来提供服务。用户程序可以通过系统调用与利用系统进行交互,获取所需的服务和资源。偶然,为了简化用户程序的开发,有心的开发者会对部分系统调用进行适度封装成库函数(库函数由用户提供),供用户程序调用。
那printf函数与scanf函数,二者都要利用硬件。
但是二者又是c语言里的库函数,但是能访问到硬件资源。就能阐明,二者一定封装了系统调用接口,以是才气不停顺着剪头向下
库函数实现时,如果内部封装了多种利用系统的系统调用,那该语言便具有可移植性
那我们为什么之前不停没有直接利用过系统调用呢?
直接利用系统调用需要对利用系统较为认识,而且不方便。
以是库函数封装了系统调用后,更方便我们利用
总结
利用系统的设计目的是管理计算机系统的软硬件资源,为用户程序提供执行情况。它通过对资源的描述和组织,以及提供系统调用和库函数的方式,来实现对计算机系统的管理和控制。
[*]从上到下是不可以发生越级访问。
[*]不可以绕过利用系统
[*]利用系统从头到尾是贯穿的
3.初识历程
3.1 基本究竟与引入
在利用系统中,当一个程序被加载到内存中运行时,通常会涉及到内存中的数据拷贝。这涉及到两个概念:加载(Load)和拷贝(Copy)。
[*]加载(Load):加载是指将程序的可执行文件(二进制文件)从磁盘加载到内存中,以便在CPU上执行。这个过程包括将程序的代码段、数据段、堆、栈等部分加载到内存中,并创建起对应的内存映射关系。
[*]拷贝(Copy):在某些情况下,加载到内存中的程序数据可能需要进行拷贝。这种情况通常发生在涉及历程间通讯大概动态链接的情况下。比方:
[*]历程间通讯:如果多个历程需要共享某些数据,那么这些数据需要在差别历程的地址空间中拷贝。
[*]动态链接:当程序利用动态链接库时,库函数的代码和数据需要从共享库加载到历程的地址空间中,这可能涉及到数据的拷贝。
[*] 我们可以同时启动多个程序 — 此时便有多个.exe加载到内存
加载程序到内存是指利用系统将程序的可执行文件(通常是二进制文件,如.exe文件)中的代码和数据加载到系统的内存空间中,并为其分配一定的内存空间以供运行
[*] 利用系统肯定要管理多个加载到内存的程序呢
[*] 利用系统如何管理加载到内存的程序呢? ? 先描述,在组织:
[*]描述程序:
[*]利用系统起首需要描述每个加载到内存的程序。这通常通过界说struct来完成,好比历程控制块(PCB)或历程描述符。PCB包罗了关于历程的各种信息,如历程ID、状态、程序计数器、内存分配情况、资源占用情况等。
[*]组织程序:
[*]加载到内存的程序可能会被组织成一个历程队列或历程表。如许的组织方式使得利用系统可以或许轻松地访问和管理每个程序。历程队列可以按照优先级、状态或其他尺度进行排序,以便利用系统可以或许有效地调治和管理这些程序
https://img-blog.csdnimg.cn/direct/097fae3bdaa44d07a1a101132a5be2b1.png
[*]加载程序到内存:
[*]创建PCB对象:
[*]通过对PCB的管理,来对程序进行管理
[*]对于历程的管理就是对PCB链表增删查改
3.2 历程概念
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2FNerosts%2Freserve_picture%2F%25E8%25BF%259B%25E7%25A8%258B17.png&pos_id=img-roa0PDIA-1714301663275%29 讲义概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体
历程=内核PCB对象+可执行程序 ==> 历程=内核数据结构+可执行程序
内核数据结构是利用系统内核中用于组织和管理系统资源的数据形式或组织方式。这些数据结构通常用于描述和维护系统的状态、历程信息、内存分配、文件系统、设备驱动等方面的内容。一些常见的内核数据结构包括:
[*] 历程控制块(PCB): 用于描述和管理历程的数据结构,包括历程的标识符、状态、优先级、程序计数器、寄存器状态等信息。
[*] 内存管理数据结构: 包括页表、段表、内存映射等数据结构,用于管理系统的内存分配和地址映射。
[*] 文件控制块(FCB): 用于描述和管理文件的数据结构,包括文件的属性、位置、权限等信息。
[*] 设备控制块(DCB): 用于描述和管理设备的数据结构,包括设备的标识符、状态、缓冲区等信息。
[*] 系统调用表: 用于存储系统调用的函数指针或入口地址,以便用户程序可以通过系统调用接口访问利用系统提供的功能。
[*] 停止向量表(IVT): 用于存储系统停止处置惩罚程序的入口地址,以便利用系统可以在发生硬件停止时进行处置惩罚。
[*] 内核堆栈: 用于生存利用系统内核代码执行过程中的临时数据和状态信息。
3.3 描述历程—PCB
历程信息被放在一个叫做历程控制块的数据结构中,可以明白为历程属性的集合。利用系统学科里称之为PCB(process control block)
而在Linux利用系统下的PCB是task_struct
3.4 task_struct—linux中的PCB
在Linux内核中,描述历程的结构体被称为 task_struct。task_struct 是 Linux 内核中非常重要的数据结构,用于表示和管理历程。每个正在运行或等待运行的历程都有一个对应的 task_struct 结构体。
task_struct 结构体包罗了大量描述历程状态和属性的字段,其中包括:
[*]历程标识符(PID): 用于唯一标识一个历程。
[*]历程状态: 表示历程当前的状态,如运行、停当、壅闭等。
[*]历程优先级和调治信息: 包括历程的优先级、调治计谋等。
[*]历程描述符(Files Descriptor): 记录了历程打开的文件描述符。
[*]历程的父子关系: 包括父历程、子历程和兄弟历程等关系。
[*]历程的执行状态: 包括历程的程序计数器、堆栈指针等执行状态信息。
[*]历程的内存管理信息: 如内存映射、页表等。
[*]历程的资源限制: 如内存限制、CPU 时间限制等。
[*]信号处置惩罚器: 记录了历程注册的信号处置惩罚函数和等待的信号。
[*]历程的调试信息: 如调试状态、跟踪状态等。
struct task_struct {
// 进程标识符
pid_t pid;
// 进程状态
int state;
// 进程优先级和调度信息
int priority;
int policy;
// 进程描述符
struct files_struct *files;
// 进程的父子关系
struct task_struct *parent;
struct list_head children;
// 进程的执行状态
struct pt_regs *thread_regs;
unsigned long stack;
// 进程的内存管理信息
struct mm_struct *mm;
// 进程的资源限制
struct rlimit rlim;
// 信号处理器
struct sigaction sigaction;
// 进程的调试信息
int debug_flags;
// 其他字段...
};
今天就先到这里把,下次就能把历程检察、状态、优先级什么的给讲讲了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]