Linux的进程的概念

目录

1.冯诺依曼体系结构(硬件)

2.操作系统(软件)

2.1概念

2.2设计os(操作系统)的目的

2.3如何理解管理

2.4系统调用和库函数概念

3.进程

3.1基本概念

3.2描述进程-PCB和组织进程

3.3ps axj指令

3.4查看进程

3.5通过系统调用获取进程表示符(PID)

getpid()系统调用函数,获取(子)进程pid

getppid()系统调用函数,获取子进程的父进程pid

3.6通过系统调用,创建子进程-fork()函数初识

4.进程状态

5.Z状态(zombie)-僵尸进程

6.孤儿进程

7.环境变量

8.进程优先级

9.程序地址空间

1.冯诺依曼体系结构(硬件)

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

冯·诺依曼体系结构是指一种将计算机硬件和软件分离的计算机结构,它由计算机科学家冯·诺依曼于1945年提出。该体系结构的核心思想是将数据和指令存储在同一存储器中,并通过提取和执行存储器中的指令来操作数据。

具体来说,完全冯·诺依曼体系结构包括以下几个主要组成部分:

  1. 中央处理器(Central Processing Unit,CPU):负责执行指令和处理数据。CPU包含算术逻辑单元(运算器(ALU))和控制单元(控制器(Control Unit,CU))。ALU执行算术运算和逻辑运算,而CU负责从存储器中提取指令并控制ALU和其他组件的操作(对计算硬件流程进行一定的控制)。
  2. 存储器(Memory):用于存储指令和数据。存储器可以分为随机访问存储器(Random Access Memory,RAM)和只读存储器(Read-Only Memory,ROM)。RAM用于存储运行时数据和程序,而ROM用于存储固化的程序和数据。(存储器指的是什么?指的是内存(主存储器(内存条),翻译为Memory))
  3. 控制器(Controller):负责将指令从存储器中提取到控制单元,并将执行结果返回到存储器。控制器通常包含指令寄存器(Instruction Register,IR)、程序计数器(Program Counter,PC)和指令译码器(Instruction Decoder)。
  4. 输入设备(Input Devices):用于与计算机进行交互,包括键盘、鼠标、摄像头、话筒、磁盘、网卡等。
  5. 输出设备(Output Devices):显示器、打印机、播放器硬件、磁盘、网卡等

注:有的设备是纯的输入或者输出,也有既是输入,又是输出设备。其中我们把输入、输出设备叫做外部设备,简称外设。

中央处理器(它独占两个分别是:运算器、控制器)、存储器、输入和输出设备,这五大单元它们都是独立的个体!这些硬件单元需要通过一组线互相连接,以传输数据和控制信号。这一组线统称为总线,是用于连接这些硬件单元的一组线,总线分为两类分别是:系统总线和IO总线。

  1. 系统总线(System Bus)是连接计算机系统中的主要硬件单元的总线,包括连接CPU、存储器和控制器的数据总线、地址总线和控制总线。它用于在这些硬件单元之间传输指令、数据和控制信号。
  2. IO总线(IO Bus)是连接输入和输出设备的总线,用于将数据和指令从输入设备发送到内存(存储器),或将数据和结果从内存(存储器)发送到输出设备。

总线的作用是提供数据和控制信号的传输路径,使各个硬件单元能够相互通信和协调工作。通过总线连接,这些独立的硬件单元可以协同工作,实现计算机系统的功能,所以就有了我们上面的那张图,这就叫做冯·诺依曼体系结构。

在冯诺依曼中不仅仅规定硬件方面的构成,还规定了一些软性方面的东西,比如数据:

1.储存方面:

首先我们要知道CPU、磁盘、内存、还有很多的设备本身都是具有数据储存能力的,像CPU内部所对应的寄存器储存的效率是非常高,而我们对应的内存储存的效率也还是不错的,而一般像外设他们的储存效率是非常底下的,在我们的储存领域有一个储存金字塔,储存金字塔他有一个规则,如图:

2.效率方面:

在冯诺依曼体系结构场景中,数据必须是从输入设备写到内存设备中,然后CPU(中央处理器)不能直接从外设(输入设备)里面拿取数据,只能从内存设备当中拿取数据,所以需要先从外设把代码和数据加载到内存,拿到数据之后进行处理做完计算之后,一样不能直接把数据输入到外设之中(输出设备),只能再把数据写回到内存设备中,最后通过内存设备把对应的数据刷新到输出设备,但是为什么CPU不能直接从外设拿取数据,然后再把数据直接刷新到输出设备呢?因为在于这两个外设和中央处理器的差别速度太大了,如果让两个外设直接和中央处理器直接进行交互,那么其中我们对应的整个计算机结构的效率就以输入、输出设备的效率为主了,当输入设备还在输入数据的时候,中央处理器就已经把数据处理完交给了输出设备,输入设备却还在的慢悠悠的输入数据,所以如果输入设备直接把数据交给我们的中央处理器,势必会拖慢中央处理器的速度,导致整个计算机的整机效率变得非常底下,所以在这个情况下引入了一个稍微比输入设备快,稍微比中央处理器慢的设备,这个设备叫内存,这个内存设备速度适中容量适中,所以我们可以让输入设备把数据输入到内存设备当中,中央处理器去内存设备拿取数据进行处理之后再写回到内存设备中,最后又内存设备刷新到输出设备中,这样就可以适配硬件层面上CPU和外设的速度差,虽然也有速度差,但是小了很多。有的人会问输入设备把数据读取到内存,CPU在到存储器拿取数据然后写回到存储器中,最后再刷新到输出设备,这个动作依然是串行的,快也没快到哪里去?依然是又输入设备决定整体的速度。虽然CPU的内存是有限的,但是从我们有了存储器开始,不要觉得我们把数据交给了存储器CPU才开始运算,那么可能是输入设备提前把数据预加载到了存储器,然后我们的CPU在存储器读取数据的时候早被全部加载到了存储器中。我们知道一个程序在运行时必须得先从磁盘把数据加载到内存中,这个过程CPU又可能正在做着其他任务的计算,当我们加载完的时候,CPU就可以开始读取执行我们的数据运行程序,所以CPU的计算和加载可以同时进行,所以就由 串行 变成 并行 那么经过这样数据加载调度,然后就可以保证我们各个硬件并行同时的跑起来,所以它的效率并没有我们想象中的那么差,它可以直接在一定的意义上提高我们的效率。虽然说了这么多但是上面这套工作由谁来完成?谁来把数据从外设读取内存,再通过CPU去计算完,然后再由内存把数据刷新到外设?这套工作由操作系统来完成的,后面在进行解释。

所以为什么一个程序要运行,必须要先加载到内存中运行。为什么?因为一个程序在编译好了之后,在磁盘中储存的是一个普通文件,那么我们编写的代码和数据要不要被CPU执行和计算?所以我们的数据最终必须是要去被CPU进行运行计算,代码和数据要被CPU进行运算就必须要先加载到内存中。因为CPU只从内存中拿数据,而我们数据是在外设当中的,就注定了必须从外设把数据加载到内存中,所以为什么我们的程序在进行运行时必须要把数据加载到内存中,是因为我们冯诺依曼体系规定的!

冯·诺依曼体系结构的特点包括:

  1. 存储程序:指令和数据以相同的格式存储在存储器中,可以按照程序的顺序执行。这使得程序可以根据需要修改和扩展,并允许计算机执行不同的任务。
  2. 存储器随机访问:存储器中的数据可以通过访问地址来获取,并且读写操作具有相同的时间开销。这使得计算机可以快速地访问和操作存储器中的数据。
  3. 指令流水线:指令的执行通过流水线的方式进行,可以同时执行多条指令的不同阶段,提高了计算机的执行效率。
  4. 计算机硬件和软件分离:冯·诺依曼体系结构将计算机的硬件和软件分离,使得计算机的设计更加灵活,可以通过改变软件来实现不同的功能。

总而言之,完全冯·诺依曼体系结构是一种经典的计算机体系结构,它的核心思想是通过将数据和指令存储在同一存储器中,并通过提取和执行存储器中的指令来操作数据。这种体系结构具有结构清晰、灵活性高和可扩展性强的特点,成为现代计算机体系结构的基础。

关于冯诺依曼,必须强调几点:

1.这里的存储器指的是内存,这里的存储器通常是指主存(Main Memory),也就是我们常说的内存。

在冯·诺依曼体系结构中,主存储器通常是位于计算机内部的一种半导体存储器,如随机存取存储器(RAM)。这是计算机中的一种高速读写存储器,用于存储正在执行的程序、数据和临时结果。主存储器具有较小的存储容量,但具有很快的读写速度。
2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
4.一句话,所有设备都只能直接和内存打交道

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

2.操作系统(软件)

操作系统是计算机系统中的核心组件,为用户和其他应用程序提供了一个可靠、高效和安全的运行环境。不同的操作系统有不同的特点和功能,例如Windows、MacOS、Linux等。

像我们上面说的那一套工作流程,我们对应的这个数据呢,可能要先读取到内存了,然后再到CPU里运算,然后运算完之后,就是写回到我的内存,再刷新到我们的网卡。那么所有的这些设备其实都很笨,他为我们提供最基本的这样的功能,但最终是谁用这些功能呢?我们刚说的整个的这一套过程啊,那么。在键盘看来,键盘它只具备获取用户数据,把用户数据写到内存的能力。但什么时候用这个能力啊,那么我们应该怎么用,所以这个东西其实是要有一个控制逻辑在上,然后呢,一定要有一个逻辑来宏观的控制。比如说我们对应的电脑当中,你的计算机里可能不仅仅只有QQ在跑,你可能登着游戏登着微信,你也才登的知道凭什么我就要跑你的软件?那我什么时候跑这个软件,什么时候跑其它的软件,那么这个是不是就必须得有人控制,而为了更好的能够进行使用,首先要知道冯诺依曼体系结构里面的这些硬件设备都很傻,都像是一个个典型的游戏里的NPC,相当于就是在一个游戏世界里面的一个个角色,每一个角色都有自己的任务,但是呢,最终得有人总体把他们统筹起来,把它考虑起来给它们分配执行任务。所以就在这样的时代的背景下,我们对应的操作系统就必须诞生了,操作系统那么他最核心的功能是什么?操作系统它其实本质上是一款进行管理的软件,那他管谁呢?首先要管理的一定是我们刚上面所看到的一堆的硬件,好,上面的这些我们冯诺一曼构成的这种硬件呢,那么这上面的这些硬件最终是不是也要被我们能够管理起来啊?为了操作系统能够管理的,然后同样的我们操作系统呢,他其实未来呢,也能学到对软件这块进行管理,而他自己本身也是一款软件。比如人可以管人,同理软件自然也可以管理软件,所以操作系统既能管理硬件又能管理软件。

结论:操作系统是一款进行管理的软件!

2.1概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

操作系统是一种软件程序,它管理和控制计算机硬件资源,并为用户和其他软件提供一个统一的界面和环境。以下是操作系统的几个详细概念:

  1. 资源管理:操作系统管理计算机的各种硬件资源,包括处理器、内存、磁盘、网络等。它分配资源给不同的程序或用户,并确保它们公平共享和高效利用。
  2. 进程管理:操作系统创建、调度和终止进程(程序的执行实例)。它负责分配处理器时间片、管理进程的状态转换、处理进程通信和同步等。
  3. 内存管理:操作系统分配和回收计算机内存,以便程序可以执行。它管理物理内存和虚拟内存,提供内存保护和地址转换功能。
  4. 文件系统:操作系统提供文件和目录的组织和管理。它负责文件的创建、读取、写入、删除等操作,并提供文件访问权限控制。
  5. 设备管理:操作系统管理计算机的输入和输出设备,如键盘、鼠标、打印机、磁盘驱动器等。它负责设备的分配、调度和控制。
  6. 用户界面:操作系统提供图形用户界面(GUI)或命令行界面,以便用户与计算机交互。它接收用户输入,并将其传递给相应的程序或操作。
  7. 安全性:操作系统确保计算机系统的安全性和保密性。它提供用户认证、访问控制、数据加密和防火墙等安全功能。
  8. 错误处理:操作系统监测和处理硬件或软件错误。它提供错误检测、恢复机制和故障排除功能,以确保系统的稳定性和可靠性。

2.2设计os(操作系统)的目的

设计操作系统的主要目的是提供一个有效、可靠和方便的计算机系统环境,以支持用户和应用程序的运行。以下是设计操作系统的一些主要目的:

  1. 资源管理:操作系统的一个主要目的是管理计算机的硬件资源,如处理器、内存、磁盘和网络等。它负责分配和调度这些资源,以确保它们能够高效地被各个程序或用户共享和利用。
  2. 简化和抽象化:操作系统提供一个抽象的接口,隐藏底层硬件的复杂性,使用户和应用程序能够以简单且一致的方式与计算机系统交互。它将底层硬件细节抽象化为高级的操作和功能,使得编程和使用计算机变得更加方便和易于理解。
  3. 进程管理:操作系统负责管理和调度各个进程(程序的执行实例)。它分配处理器时间片,控制程序的执行顺序和并发性,以实现程序的并行执行和资源共享。
  4. 内存管理:操作系统管理计算机的内存资源,包括分配、回收和保护。它确保进程能够正常运行所需的内存空间,并提供虚拟内存机制来扩展可用的内存空间。
  5. 文件系统:操作系统提供文件和目录的组织和管理,以便用户和应用程序可以方便地存储、读取和管理文件。它处理文件的物理存储和逻辑访问,并提供文件的权限控制和数据保护。
  6. 驱动管理:驱动程序是为了与硬件设备进行通信而设计的软件模块。操作系统通过驱动管理来支持和控制各种硬件设备的使用。驱动管理的主要任务包括以下几个方面:

驱动程序的加载和卸载:当硬件设备插入计算机或启动计算机时,操作系统需要加载相应的驱动程序,以便与设备进行通信。类似地,当设备被拔出或计算机关闭时,操作系统需要卸载对应的驱动程序。

驱动程序的匹配和配置:操作系统需要检测和识别计算机系统中的硬件设备,并根据设备的类型和特征选择合适的驱动程序进行匹配和配置。这确保了设备能够正常工作并与操作系统进行交互。

设备驱动程序的接口和抽象化:操作系统提供一组标准的设备驱动程序接口(如API),使应用程序能够以统一的方式与硬件设备进行通信,而不需要了解设备的底层细节。这种抽象化简化了应用程序的开发和维护过程,并提供了对不同设备的兼容性。

驱动程序的更新和升级:随着硬件技术的进步和改进,驱动程序可能需要进行更新和升级,以提供更好的性能、兼容性和稳定性。操作系统需要提供机制来管理驱动程序的更新,例如通过自动更新、手动下载或集成在操作系统更新中。

通过驱动管理,操作系统能够有效地管理和控制硬件设备,使其能够与应用程序和操作系统本身进行良好的协作。这确保了硬件设备的正常工作,并提供了良好的用户体验和系统性能。

  1. 设备管理:操作系统管理计算机的输入和输出设备,如键盘、鼠标、显示器、打印机等。它控制设备的分配、调度和操作,以支持用户和程序的设备访问需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值