【Linux】冯诺依曼体系结构、操作系统概念、进程概念

news2025/1/18 8:45:25

文章目录

  • 前言
  • 一、冯诺依曼体系结构
    • 1.简介冯诺依曼体系
    • 2.CPU
    • 3.存储器
    • 3.IO(输入输出)
    • 4.总结
  • 二、操作系统(OS)
    • 1.操作系统是什么?
    • 2.为什么有操作系统?(功能)
    • 3.操作系统如何实现功能?
  • 三、系统调用和库函数
  • 四、进程
    • 1.概念
    • 2.描述进程的数据结构——PCB
      • 1.PCB
      • 2.程序和进程
      • 3.task_struct
    • 3.查看进程
      • 1.方法1
      • 2.方法2
    • 4.系统调用
      • 1.getpid
      • 2.系统调用获取进程标示符
  • 总结


前言

本文介绍了冯诺依曼体系结构、操作系统及进程概念。


一、冯诺依曼体系结构

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

1.简介冯诺依曼体系

在这里插入图片描述
截至目前,我们所认识的计算机,都是由一个个的硬件组件组成

  • 输入单元:键盘,网卡, 鼠标,扫描仪, 写板等;
  • 输出单元:磁盘,网卡,显示器,打印机等;
  • 中央处理器(CPU):含有运算器和控制器等;

关于冯诺依曼体系要注意的是:

  • 这里的存储器指的是内存
  • 不考虑缓存的情况,这里的CPU只能对内存进行读写,不能访问外设(输入或者输出设备);
  • 所有的设备都只能直接和内存打交道。

2.CPU

在整个计算机中CPU是运行速度最快的,其次是CPU中配置的寄存器,之后是内存,外设是最慢的。(CPU的运行是通过电流的交互,而外设等都是机械运动,所以速度差距是很大的)
在这里插入图片描述
CPU虽然是速度最快的,但是它只能被动接受别人的数据,CPU只有通过识别别人的指令(制造CPU时内置的指令集)才能执行别人的指令。

3.存储器

存储器指的是内存。
如果没有内存,CPU只能从外设获取数据,但是外设的速度是相对较慢的,这就意味着此时整个程序的运行速度取决于外设,这会导致程序的运行效率较慢。

木桶效应
一个水桶无论有多高,它盛水的高度取决于其中最低的那块木板。
在这里插入图片描述
内存的存在,解决了这个问题,可以先包数据存放在内存中,再加载到CPU中进行处理,这就提高了数据的处理速度。
所以CPU中的数据必须从内存中拿!!!

3.IO(输入输出)

我们所说的IO(即,input/output,输入输出)就是从内存的角度上看:把数据从输入设备存入内存的过程就是input,把数据从内存放置到输出设备的过程就是output。这就是IO的过程。

4.总结

程序的数据必须加载到内存,CPU执行的代码访问的数据必须从内存中读取。(冯诺依曼体系决定的)

二、操作系统(OS)

1.操作系统是什么?

操作系统是一个进行软硬件资源管理的软件,操作系统包含进程管理、文件管理、内存管理以及驱动管理。

2.为什么有操作系统?(功能)

操作系统:对下进行合理的管理软硬件资源(目的),对上为用户提供稳定的、高效的、安全的的执行环境(手段)。

3.操作系统如何实现功能?

管理的本质是对数据做管理。操作系统并不是直接对计算机中的各种软硬件进行管理,而是通过提取出要管理的事物的数据,对数据进行分析,最终做出决策,下发指令给驱动,由驱动进行执行,达到管理的目的。
操作系统管理软件是先用struct结构体将它描述起来,再用链表等数据结构将它组织起来。

  1. 例子:学校校长对学生的管理
    校长并不直接接触学生,而是通过辅导员将学生的数据(姓名、性别、年龄、成绩等等)传给校长,再对数据进行分析,对每一个学生的管理方案进行决策,将指令传给辅导员,由辅导员执行对学生的管理。
  2. 总结
    管理的本质是对数据做管理,管理的方法是先描述再组织
    计算机的体系结构:
    在这里插入图片描述

三、系统调用和库函数

  1. 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
  2. 系统调用在使用上,功能比较基础,对用户的要求相对比较高,所以,有一些开发者对部分的系统调用做了适当的封装,从而形成了库。有了库,就更有利于上层用户或者开发者进行二次开发。
  3. 用户不是直接和操作系统进行操作交流的,需要通过调用用各种接口间进行交流(对应计算机体系结构图中的用户操作接口和system call)。

四、进程

1.概念

  1. 大多数课本中的概念:一个运行起来的(加载到内存中的)程序叫做进程,即在内存中的程序叫做进程
  2. 内核的观点:进程是担任分配系统资源(CPU运行时间、内存等)的实体

2.描述进程的数据结构——PCB

1.PCB

进程的信息被统一放在一个叫进程控制块的结构体中,可以将它理解为进程属性的集合。PCB(process control block),linux操作系统下的PCB是task_struck结构体。

2.程序和进程

程序本质是放在磁盘上的可执行文件(.exe文件)。
进程则是将程序加载到内存中(根据冯诺依曼结构体系,程序要允许需要先加载到内存中)并且由操作系统进行管理,生成一个描述自身性质(属性)的数据结构(PCB)。
因此,进程是由内核数据结构(PCB)和进程在磁盘上的对应代码共同组成的。

3.task_struct

Linux中描述进程属性的数据结构PCB叫做task_struct(task_struck是PCB的一种),它被装载在RAM(内存)中。
task_struct内容分类:

  1. 标识符:描述进程的唯一标识符,用于区分不同的进程;
  2. 状态:任务状态、退出码、退出信号等;
  3. 优先级:相对其他进程的优先级;
  4. 程序计数器:记录程序中即将被执行的下一条指令的地址(不是下一条指令)
  5. 内存指针:包括程序代码和进程相关数据的指针以及与其他进程共享的内存块的指针;
  6. 上下文数据:进程执行时处理器的寄存器中的数据;
    用一个例子说明:
    张三同学因为生病需要休学一年,那么在他正式学修前需要准备申请休学的材料,同时要带走他在学校放置的物品。
    休学回来后,他将申请恢复,同时将自己带走的物品重新放回学校。
    这些被张三带走又带回的物品就是他的上下文数据。
  7. I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表;
  8. 记账信息:包括处理器的时间总和,使用的时钟数总和、时间限制、记账号等。

所有运行在操作系统中的进程都以task_struct链表的形式存在内核中。

3.查看进程

1.方法1

  1. 创建文件myproc.c和Makefile
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 查看进程
    先复制一个ssh会话,再用ps ajx | head -1 && ps ajx | grep myproc | grep -v grep命令显示该可执行文件中的进程信息。
    在这里插入图片描述
    我们可以用ctrl + c终止进程,也可以用kill - 9 (进程pid)杀掉进程
    在这里插入图片描述
    进程运行的本质是读取并执行程序内部的代码,从启动到终止这个进程的过程会有很长一段时间,在整个过程中它都具有动态属性。即,进程在调度运行的时候就具有动态属性

2.方法2

修改myproc.c文件
在这里插入图片描述
使用命令:ls /proc/(进程pid) -d查看进程
如图:通过进程pid来查看进程,当进程被杀死就无法再进行查看了。
在这里插入图片描述
如图,进程也可以被当作一个文件看待。
当然,重新执行进程时操作系统会为进程分配一个新的pid。
在这里插入图片描述

4.系统调用

1.getpid

获取进程的pid。该函数的返回值就是进程的pid。
在这里插入图片描述

2.系统调用获取进程标示符

getpid();//获取本进程的标示符
getppid();//获取本进程父进程的标示符

在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了冯诺依曼体系结构、操作系统以及进程的相关概念。本文作者目前也是正在学习Linux相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

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

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

相关文章

MySQL之触发器相关操作

1. 概念 触发器,就是⼀种特殊的存储过程。触发器和存储过程⼀样是⼀个能够完成特定功能、存储 在数据库服务器上的SQL⽚段,但是触发器⽆需调⽤,当对数据表中的数据执⾏DML操作时 ⾃动触发这个SQL⽚段的执⾏,⽆需⼿动调⽤。 在MyS…

前端食堂技术周刊第 83 期:TS 5.1 RC、Nuxt 3.5、INP、Kinp、管理 GitHub 通知、WebXR

By Midjournery 美味值:🌟🌟🌟🌟🌟 口味:杏花乌龙拿铁 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 TypeScript 5.1 RCNuxt 3.5INP 将成为新的 Core Web…

【LeetCode232】用栈模拟实现队列

你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题目…

【牛客刷题专栏】0x29:JZ31 栈的压入、弹出序列(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

周赛346(括号匹配问题变形、双指针、模拟/打表预处理+DFS)

文章目录 周赛346[2696. 删除子串后的字符串最小长度](https://leetcode.cn/problems/minimum-string-length-after-removing-substrings/)暴力模拟使用栈 [2697. 字典序最小回文串](https://leetcode.cn/problems/lexicographically-smallest-palindrome/)双指针 [2698. 求一个…

开放原子训练营(第三季)inBuilder低代码开发实验室之低代码浪潮已至

目录 、前言: 一、为什么选择它 二、小试牛刀 3.1设计源数据 3.2设计页面 3.3发布应用 四、总结 、前言: 当你还在沉浸于AI和大数据浪潮带来的影响时,另一种低代码或0代码的编程方式在市场流行,截止至2023年,低代码的浪…

浅浅谈谈ssm的那些事儿外加AOP和DI+DAO思想的理解和处理json数据的第三方工具

MyBatis 一级缓存 默认是打开的 SqlSession级别的缓存,同一个SqlSession的发起多次同构查询,会将数据保存在一级缓存中。 在sqlsession 中有一个数据结构 是map 结构, 这个区域就是一级缓存区域,一级缓存区域中的 key 是由 sql 语…

11.Mysql内核语句优化规则详解

MySQL性能调优 1. 条件化简1.1 移动不必要的括号1.2 常量传递1.3 移动没用的条件1.4 表达式计算1.5 常量表检测 2. 外连接消除3. 子查询MySQL内部优化规则3.1 子查询语法3.1.1 按返回的结果集区分子查询标量子查询行子查询列子查询表子查询 3.1.2 按与外层查询关系来区分子查询…

20230522打开cv1826的buildroot的内核的早期打印的功能

20230522打开cv1826的buildroot的内核的早期打印的功能 在CV1826的buildroot启动的时候,有些内核打印/printk显示不了。 大概在内核时间3-4s秒钟的前后,有一段内核打印丢失了! 在CV1826的buildroot启动到uboot的时候,按ctrlC组合…

性能优化之思路和分析

、优化思路 尽可能减少首屏必须资源的体积尽可能提前首屏必须资源/接口的请求发起时机延后闲时预缓存非必要资源/请求 代码分离 https://webpack.docschina.org/guides/code-splitting/ 动态导入 https://webpack.docschina.org/guides/code-splitting/#dynamic-imports sp…

vector模拟

先来看看vector的源码&#xff0c;string没有看是因为string严格意义上来讲不属于STL。 源代码之间也是存在区别的&#xff0c;大同小异&#xff0c;可以去网上查如何下载STL的源码库。 先看看<vector>文件中的内容&#xff08;当做参考即可&#xff09;&#xff1a; 内容…

springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

【分布式系统】分布式锁实现之Redis

锁有资源竞争问题就有一定有锁的存在&#xff0c;存储系统MySQL中&#xff0c;有锁机制保证数据并发访问。而编程语言层面Java中有JUC并发工具包来实现&#xff0c;那么锁解决的问题是什么&#xff1f;主要是在多线程环境下&#xff0c;对共享资源的互斥。从而保证数据一致性。…

SVG在前端中的常见应用

SVG在前端中的常见应用 一、svg标签1. svg2. g 二、描边属性三、模糊和阴影效果1. 模糊2. 阴影效果 四、线性渐变和径向渐变1. 线性渐变2. 径向渐变 五、绘制1. 内置形状元素2. 绘制矩形3. 绘制圆形4. 绘制椭圆5. 绘制线条6. 绘制多边形7. 绘制多线条8. 绘制文本9. 绘制路径 只…

【C/C++】动态内存管理/泛型编程

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

SQLlite教程(第一篇)

SQLlite教程(第一篇 SQLlite是什么?SQLlite工作原理是什么?SQLlite有什么功能和特性?使用SQLlite有哪些注意事项?附加资料 SQLlite是什么? SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…

Mysql审核查询平台Archery部署

目录 1 Archery产品介绍2 基于docker搭建Archery2.1 系统环境2.2 安装 Docker2.2.1 安装 Docker Compose2.2.2 下载Archery2.2.3 安装并启动2.2.4 表结构初始化2.2.5 数据初始化2.2.6 创建管理用户2.2.7 退出重启2.2.8 日志查看和问题排查2.2.9 启动成功查看2.2.10 端口占用情况…

基于Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境&#xff0c;例如开发环境&#xff0c;测试环境、生产环境等。而不同环境的构建过程很可能是不同的&#xff0c;例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时&#xff0c;都需要修改相应的配置&#xff0c;这样…

day07_数组初识

数组的概述 数组就是用于存储数据的长度固定的容器&#xff0c;保证多个数据的数据类型要一致。 数组适合做一批同种类型数据的存储 数组中的元素可以是基本数据类型&#xff0c;也可以是引用数据类型。当元素是引用数据类型是&#xff0c;我们称为对象数组。 容器&#xff…

从0开始学C语言的个人心得笔记(10w字)

大学的计算机相关专业第一门教学的计算机语言就是c语言&#xff0c;很多大学生面对从未接触过的计算机语言&#xff0c;可能会觉得很难以上门&#xff0c;从而放弃学习c语言。这篇博客写的主要是个人学习C语言时候的知识总结点&#xff0c;不能保证全部是正确的&#xff0c;如有…