Linux的学习之路:9、冯诺依曼与进程(1)

摘要

本章主要是说一下冯诺依曼体系结构和进程的一部分东西。

目录

摘要

一、冯诺依曼体系结构

二、操作系统的概念

三、设计OS的目的

四、管理

五、进程的基本概念

六、PCB

七、在Linux环境下查看进程

八、使用代码创建进程

 九、思维导图


一、冯诺依曼体系结构

如下方图片所示黑色箭头是控制信号,红色是数据信号,冯·诺依曼体系结构,也称为普林斯顿结构,是现代计算机发展的基本结构形式,由数学家冯·诺依曼提出。它奠定了现代电子计算机的基本结构,规定了五大组成部件:运算器、控制器、存储器、输入设备和输出设备,并规定了以二进制形式表示数据和指令。

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

1、单处理机结构:计算机以运算器为中心,运算器、控制器等部件都通过运算器进行数据的加工处理。

2、存储程序思想:将程序指令和数据存储在同一存储器中,CPU从存储器中取出指令和数据进行相应的计算。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。

3、指令和数据以二进制形式表示:这种表示方式使得计算机内部的处理更加统一和高效。

4、指令由操作码和操作数组成:操作码指示计算机执行何种操作,操作数则是操作的对象。

5、指令顺序执行:按照指令在存储器中的排列顺序,逐条取出指令来执行。

二、操作系统的概念

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

怎么举例呢,有点像是一个银行,我门是无法直接去银行的仓库里面自己拿钱,并且银行也只会流出几个窗口让我门进行取钱, 这一步就有点像怕我们去抢钱,这个就是为了保护银行的安全,也就是相当于内核,在冯诺依曼体系结构中,我知道了,我们是不能直接进行访问控制器的,是利用存储器读取我们所输入的数据,从而进行访问,这个在我们访问过程中,是不认识如何访问控制器的,就像有些老爷爷老奶奶去银行存钱的时候就不会。

所以需要一些东西把这个封装起来我们就可以进行访问,这个访问也会变得轻松,这个就是外壳程序,也就是相当于把操作的成本降低,安全性提高,这个就是操作系统,他的结构就像下方图片所示。

三、设计OS的目的

设计操作系统的目的主要是为了更有效地管理和使用计算机硬件和软件资源,提供友好的用户接口,并保护系统的安全和稳定。以下是设计操作系统的几个主要目的:

1、提高资源利用率:操作系统通过合理调度和管理计算机的各种资源(如CPU、内存、硬盘等),确保它们得到高效的利用。它可以根据任务的优先级和系统的负载情况,动态地分配资源,从而避免资源的浪费和冲突。

2、方便用户使用:操作系统提供了一个友好的用户接口,使得用户可以轻松地与计算机进行交互。无论是图形用户界面还是命令行界面,操作系统都致力于简化用户的操作过程,提高用户的工作效率。

3、提供强大的系统功能:操作系统内置了许多系统级的功能,如文件管理、设备驱动、网络通信等。这些功能使得用户可以方便地进行文件操作、设备控制和网络通信,而无需深入了解底层硬件和软件的细节。

4、保证系统安全稳定:操作系统负责保护系统的安全,防止未授权的访问和恶意软件的攻击。它采用了一系列的安全机制和技术手段,如访问控制、加密和防火墙等,确保系统的稳定运行和数据的安全。

5、支持多任务并发执行:操作系统允许多个任务(或进程)同时运行,通过合理的调度和管理,使得这些任务能够并发执行,从而提高系统的吞吐量和响应速度。

6、提供可扩展性和可维护性:操作系统设计时要考虑系统的可扩展性和可维护性,使得系统能够方便地添加新功能或修复漏洞,同时保持系统的稳定性和兼容性。

综上所述,设计操作系统的目的是为了更有效地管理和使用计算机资源,提供友好的用户接口,保证系统的安全稳定,并支持多任务并发执行。这些目的的实现,使得操作系统成为计算机系统中不可或缺的重要组成部分。

四、管理

管理怎么解释呢,就像我们在学校中是基本上见不到校长的,校长需要管理学生,那么每年那么多学生是怎么管理的过来,总不能每年来新生校长都要一个一个进行登记吧,所以只是就出现了院长辅导员等等,一个一个下方进行手机,级别一个比一个高就相当于管理,但是呢几千个学生也没法一个一个看信息,还需要排序啊,把某一部分人放在一起,统计出来,然后这时候我就想起来之前写过的通讯录,当时第一反应就是第一一个结构体,去统计信息,所以这个也是类似,要不信息也是很斑驳的,所以在操作系统这里,也是先描述,在组织。

描述起来,用struct结构体,组织起来,用链表或其他高效的数据结构这样就能进行描述这个管理的过程,总结来说就是六个字先描述在组织。

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

这个就是在描述过后就可以进行组织,怎么进行组织呢,就是封装起来,这个封装就是相当于库,在这个库我之前在学习c和c++就是经常使用。

五、进程的基本概念

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,也是操作系统结构的基础。它实质上是程序在多道程序系统中的一次执行过程,具有动态性,即动态产生、动态消亡。同时,进程具有并发性,任何进程都可以同其他进程一起并发执行;独立性,作为能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;以及异步性,由于进程间的相互制约,使进程具有执行的间断性。

从理论角度看,进程是对正在运行的程序过程的抽象;从实现角度看,进程是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。狭义上,进程可以视为一段程序的执行过程;广义上,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

在操作系统中,进程是动态执行的基本单元。它既是基本的分配单元,也是基本的执行单元。根据进程的特点,进程可以被分类为交互进程、批处理进程和守护进程等。交互进程通常是由shell启动的,并可以与用户进行交互操作;批处理进程则负责按照顺序启动其它进程;守护进程是执行特定功能或者执行系统相关任务的后台进程。

总的来说,进程是计算机系统中的核心概念之一,它负责程序的执行和资源的管理,对于计算机系统的稳定性和效率至关重要。

总结一下:进程就等于对应的代码和数据+进程对应的PCB结构体。

六、PCB

这个就是相当于上文中说管理的时候,统计学生信息时创建的结构体就是这个PCB,他的全称是process control block,Linux操作系统下的PCB是: task_struct。

task_struct-PCB的一种在Linux中描述进程的结构体叫做task_struct,task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

task_ struct内容分类如下方代码框中。

标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

七、在Linux环境下查看进程

组织进程:可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

查看进程:进程的信息可以通过 /proc 系统文件夹查看,例:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹,大多数进程信息同样可以使用top和ps这些用户级工具来获取,如下方截所示,因为代码看不见彩色不好看所以就给看截图了。

ps 用于显示当前系统的进程状态。通过 ps 命令,你可以查看系统中正在运行的进程,以及它们的状态、优先级、所使用的资源等信息,常用的 ps 命令选项有:

e: 显示所有进程。

f: 全格式显示。

l: 长格式显示。

u user: 显示指定用户的所有进程。

x: 显示没有控制终端的进程。

如下方代码就是查看了一下进程和父进程,test.c的代码在代码框里,结果在块里。

[ly@VM-24-9-centos Linux_1]$ vim text.c
[ly@VM-24-9-centos Linux_1]$ gcc -o text text.c
[ly@VM-24-9-centos Linux_1]$ ll
total 16
-rwxrwxr-x 1 ly ly 8464 Apr 13 20:07 text
-rw-rw-r-- 1 ly ly  152 Apr 13 20:07 text.c
[ly@VM-24-9-centos Linux_1]$ ./text
pid: 15074
ppid: 10266
[ly@VM-24-9-centos Linux_1]$  

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;
}

八、使用代码创建进程

fork是创建进程的函数,fork有两个返回值,父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝),如下方代码他的返回值有两个人,也就是会创建两个进程所以只是一个代码也会打印两次。

[ly@VM-24-9-centos Linux_1]$ ./text
hello proc : 17484!, ret: 17485
hello proc : 17485!, ret: 0
[ly@VM-24-9-centos Linux_1]$ 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();    printf("hello proc : %d!, ret: %d\n", getpid(), ret);sleep(1);return 0;
}

 九、思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G Frequency Bands 频率分布

连接&#xff1a;https://www.5g-networks.net/5g-technology/5g-frequency-bands/

最新视频理解大模型之MiniGPT4-video

前言 随着大模型的爆火&#xff0c;多模态大模型也随之卷了起来&#xff0c;基本每隔一小段时间就会冒出一个新模型。 今天给大家带来一个最新发现的关于视频理解的多模态大模型。 它的名字是MiniGPT4-video&#xff0c;可以看的出来其是MiniGPT4的一个分支&#xff1b;Mini…

STM32利用软件I2C通讯读MPU6050的ID号

今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。首先需要完成的就是MPU6050的初始化函数 然后就是编写 指定地址写函数&#xff1a; 一&#xff1a;开始 二&#xff1a;发送 从机地址读写位&#xff08;1&#xff1a;读 0&#xff1…

ESP-IDF移植lvgl 驱动 ST7789

文章目录 1 前言2 准备3 移植LVGL3.1 工程准备3.2 修改 CMakeLists.txt文件编译 LVGL3.3 编译LVGL 4 编译 ST7789 LCD驱动5 发现问题 1 前言 本教程开始学习 LVGL的&#xff0c;开始之前要把环境配置好&#xff0c;首先就需要移植 lvgl&#xff0c;使用的是 esp32 环境&#xf…

kafka学习记录

文章目录 windows单机版kafka搭建步骤主题的增删改查操作消息的生产与消费 Windows集群版kafka搭建步骤 prettyZoo 尚硅谷Kafka教程&#xff0c;2024新版kafka视频&#xff0c;零基础入门到实战 【尚硅谷】Kafka3.x教程&#xff08;从入门到调优&#xff0c;深入全面&#xff0…

plsql developer 一键格式化sql/美化sql

PL/SQL 格式化工具 以 Oracle SQL Developer 为例&#xff0c;使用一键格式化的步骤如下&#xff1a; 打开 Oracle SQL Developer。在“文件”菜单中&#xff0c;选择“打开文件”&#xff0c;然后选择你的 PL/SQL 文件。打开文件后&#xff0c;你可以通过右键菜单选择“格式…

vue3 知识点的补充 之 第一节

01 vue2与vue3的区别 vue2 采用object.defuneProperty()实现 对数组不友好 重写了数组的方法&#xff0c;同时无法监听数组length长度的改变。对于对象只能劫持设置好的数据 新增需要使用vue.set vue3 采用proxy进行代理&#xff0c;不需要重写数组的方法 同时可以监听数组长度…

gdb相关指令

背景知识 通过上图&#xff0c;可以看到&#xff0c;gcc 和 g 默认形成的可执行程序是release的&#xff01;&#xff01;&#xff01;故无法直接被调试。因此带 -g 选项表示使用 Debug 模式进行编译&#xff0c;而且我们可以看到&#xff0c;Debug 模式下编译形成的可执…

OSCP靶场--ClamAV

OSCP靶场–ClamAV 考点 1.nmap扫描 ##┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.42 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-13 10:01 EDT Nmap scan report for 192.168.153.42 Host is up (0.24s latency). N…

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…

VNC Viewer 连接远程主机及常见错误处理(The connection closed unexpectedly)

搭建可接收vnc连接的环境 1、下载镜像 https://github.com/fcwu/docker-ubuntu-vnc-desktop 该镜像是含有ubuntu 通过docker运行的桌面环境&#xff0c;并接受vnc 的连接 docker pull dorowu/ubuntu-desktop-lxde-vnc 2、运行容器 1&#xff09;只暴露容器的80端口&#…

二叉树练习day.9

669.修剪二叉搜索树 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变…

Singleton单例设计模式详解

目录 模式定义应用场景实现方式1.懒汉模式&#xff1a;2.饿汉模式&#xff1a;3.静态内部类反射如何防止反射攻击破坏&#xff1f; 枚举类型序列化 部分源码中的应用定位Spring & JDKTomcat反序列化指定数据源 模式定义 保证一个类只有一个实例&#xff0c;并且提供一个全…

pytorch车牌识别

目录 使用pytorch库中CNN模型进行图像识别收集数据集定义CNN模型卷积层池化层全连接层 CNN模型代码使用模型 使用pytorch库中CNN模型进行图像识别 收集数据集 可以去找开源的数据集或者自己手做一个 最终整合成 类别分类的图片文件 定义CNN模型 卷积层 功能&#xff1a;提…

Chatgpt掘金之旅—有爱AI商业实战篇|播客剧本写作|(十三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。…

b站江科大stm32笔记(持续更新)

b站江科大stm32笔记&#xff08;持续更新&#xff09; 片上资源/外设引脚定义表启动配置推挽开漏oc/od 门漏极/集电极 电阻的上拉下拉输入捕获输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构PWMPSC ARR CRR输入捕获模式测频率TIM_PrescalerConfig()初始化输入捕获测频法…

mysql四种引擎区别

MySQL 提供了多种不同的数据库引擎&#xff0c;其中最常见的有 MyISAM、InnoDB、MEMORY 和 BLACKHOLE。这四个引擎分别有以下特点&#xff1a; 1. MyISAM MyISAM 是 MySQL 的默认引擎。它对于只有较少的修改、大量读取的应用场景具有良好的性能。它不支持事务处理&#xff0c;也…

Steam平台游戏发行流程

Steam平台游戏发行流程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师也是游戏热爱者&#xff0c;经常在steam平台玩各种游戏享受快乐生活。去年幻兽帕鲁以及雾锁王国在年底横空出世&#xff0c;幻兽帕鲁更是在短短一星期取得了非常好的成绩&#xff0c;那么作为游戏…

你的系统是如何跟MySQL打交道的

1、Java 工程师眼中的数据库是什么东西? 从今天开始&#xff0c;我们将要开始一个MySQL的专栏&#xff0c;一起来研究MySQL数据库的底层原理和各种实践案例&#xff0c;以及互联网公司的技术方案。 现在我们先来看看&#xff0c;在一个Java工程师眼中的数据库是什么东西? 平时…

【Godot4.2】CanvasItem绘图函数全解析 - 5.绘制字符和字符串

概述 到这一节为止&#xff0c;我们已经学习了如何在CanvasItem中绘制简单几何图形、图片以及样式盒。但是对于很重要的文字一直没有涉及。 本节就来讲一下字符和字符串绘制函数&#xff0c;以及替换它们的两个类。 系列目录 0.概述1.绘制简单图形2.设定绘图变换3.绘制纹理4…