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;
}

 九、思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++][算法基础]Dijkstra求最短路径I(稠密图)

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

监控服务zabbix的部署

监控服务zabbix部署 文章目录 监控服务zabbix部署1. zabbix介绍2. zabbix特点3. zabbix配置文件4. 部署zabbix4.1apache安装4.2mysql安装php安装(yum方式)4.3php安装&#xff08;源码方式&#xff09;4.4配置apache代理4.5zabbix安装4.6zabbix服务端配置4.7zabbix服务端web界面…

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 18 管理科学-运筹学基础 (2)》

21、某种商品价格 P 变动与某指标 A 的变化具有很强的相关性,指标 A 的增长会导致 P 的降低,反之亦然。指标 A 和价格 P 的相关性系数是()。 A.0.18 B.0 C.0.98 D.-0.83 【答案】D 【解析】A 的增长会导致 B 的降低,反比关系,系数必然是一个负数。正比函数 y=kx,当 k>…

Linux知识点(3)

文章目录 11. 进程间通信11.1 管道11.1.0 |11.1.1 匿名管道11.1.2 命名管道11.1.3 用匿名管道形成进程池 11.2 system V共享内存11.2.1 system V函数11.2.2 system 命令 11.3 system V消息队列11.4 system V 信号量 12. 进程信号12.1 前台进程和后台进程12.1.1 jobs12.1.2 fg &…

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

Linux 使用 ifconfig 报错:Failed to start LSB: Bring up/down networking

一、报错信息 在运行项目时报错数据库连接失败&#xff0c;我就想着检查一下虚拟机是不是 Mysql 服务忘了开&#xff0c;结果远程连接都连接不上虚拟机上的 Linux 了&#xff0c;想着查一下 IP 地址看看&#xff0c;一查就报错了&#xff0c;报错信息&#xff1a; Restarting…

【排序 贪心】3107. 使数组中位数等于 K 的最少操作数

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

读所罗门的密码笔记19_治理模式

1. 解决方案 1.1. 全球人工智能的环境错综复杂&#xff0c;它严重依赖于价值观&#xff0c;且关系重大 1.2. 即使是与大家同仇敌忾的问题做斗争&#xff0c;也往往无法在国际社会中取得最佳效果 1.3. OPCW&#xff08;禁止化学武器组织&#xff09;已经帮助限制了化学武器的…

编曲知识17:音高修正 节奏修正 压缩器应用 压缩数值算法

34届音高修正 节奏修正 压缩器应用 压缩数值算法独立音乐人训练营基地,七年在线教育编曲系统授课,培养了几千名独立音乐人https://app8epdhy0u9502.pc.xiaoe-tech.com/detail/l_660be2e3e4b023c02af7abbc/4?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 修音 准备工作 …

005Node.js模块URL的使用

引入 URL 模块 要使用 URL 模块&#xff0c;首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中&#xff1a; const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…

你的高佣副业不二之选,开始流量卡推广,一文看懂号卡推广

在这个信息化的时代&#xff0c;网络已成为人们生活中不可或缺的一部分。然而&#xff0c;在享受着便捷与高效的同时&#xff0c;我们也必须面对一个现实问题&#xff0c;也就是高昂的流量费用。为了解决这一困扰广大用户的痛点&#xff0c;我们今天带来了一个极具吸引力的机会…

CLIP模型入门

简介 CLIP&#xff08;Contrastive Language-Image Pre-Training&#xff09;是OpenAI在2021年初发布的多模态预训练神经网络模型&#xff0c;用于匹配图像和文本。该模型的关键创新之一是将图像和文本映射到统一的向量空间&#xff0c;通过对比学习的方式进行预训练&#xff…

C语言中抽象的编译和链接原理

今天04.12&#xff0c;身体小有不适&#xff0c;但是睡不着觉&#xff0c;秉着不能浪费时间的原则&#xff0c;现在就简单写一下有关我们C语言中编译和链接的大体过程吧&#xff0c;因为编译和链接是比较抽象的&#xff0c;而且内容是比较底层&#xff0c;我们这里就简单了解它…

MySQL进阶-合

目录 1.使用环境 2.条件判断 2.1.case when 2.2.if 3.窗口函数 3.1.排序函数 3.2.聚合函数 3.3.partiton by ​​​​​​​3.4.order by 4.排序窗口函数 5.聚合窗口函数 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 MySQL进阶…

【数学】主成分分析(PCA)的详细深度推导过程

本文基于Deep Learning (2017, MIT)&#xff0c;推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。 blog 1 概述 现代数据集&#xff0c;如网络索引、高分辨率图像、气象学、实验测量等&#xff0c;通常包含高维特征&#xff0c;高纬度的数据可能不清晰、冗余&am…

L1 【哈工大_操作系统】什么是操作系统

从本期开始&#xff0c;笔者将出一系列哈工大的《操作系统》课堂要点笔记&#xff0c;该课程应该算得上是国内最好的操作系统课程之一&#xff0c;也是哈工大CS课程含金量最高的课程之一。尤其是对于想学习国外课程《MIT 6.S081》《MIT 6.828》又基础不足的同学&#xff0c; 特…

微服务学习3

目录 1.微服务保护 1.1.服务保护方案 1.1.1.请求限流 1.1.2.线程隔离 1.1.3.服务熔断 1.2.Sentinel 1.2.1.微服务整合 1.2.2.请求限流 1.3.线程隔离 1.3.1.OpenFeign整合Sentinel 1.3.2.配置线程隔离 1.4.服务熔断 1.4.1.编写降级逻辑 1.4.2服务熔断 2.分布式事…

SpringMVC(一)【入门】

前言 学完了大数据基本组件&#xff0c;SpringMVC 也得了解了解&#xff0c;为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多&#xff0c;但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到&#xff0c;所以不废话学吧…

有序二叉树的增删改查(源代码讲解)

有序二叉树的相关实体类 TreeNode类 二叉树结点类&#xff0c;包含三个属性&#xff1a;value&#xff0c;leftChild&#xff0c;rightChild 有序二叉树类就包括这样一个根节点 剩下的getter和setter方法&#xff0c;有参无参构造&#xff0c;toString方法都是老生长谈&…

Zotero插件ZotCard中AI-NNDL文献笔记卡分享及卡片使用方法

一、卡片社区分享 github&#xff1a;ZotCard插件AI-NNDL论文卡片模板 Issue #67 018/zotcard (github.com) 二、卡片效果预览 ZotCard插件AI-NNDL论文卡片模板是关于人工智能神经网络与深度学习论文的笔记卡片&#xff0c;效果预览如下图&#xff1a; 三、卡片代码 经过了…