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

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

前言

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


一、冯诺依曼体系结构

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

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相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

相关文章
|
2月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
223 0
|
2月前
|
Unix 物联网 Linux
都什么年代了,你还不懂啥是Linux操作系统
至于华为鸿蒙操作系统是不是独树一帜,这个留给各位阅读本文的网友们来讨论
72 0
|
2月前
|
安全 Linux iOS开发
linux属于什么操作系统
Linux是一种自由和开放源代码的操作系统,具有高度的灵活性和可定制性。与常见的操作系统如Windows和macOS相比,Linux具有自由、安全和稳定等优势。Linux已广泛应用于服务器、桌面电脑、超级计算机和嵌入式设备等领域,并且在未来的发展前景广阔。由于其自由和开放源代码的特性,Linux还促进了计算机技术和社区的发展,为全球的计算机用户提供了更多的选择和可能性。
|
2月前
|
安全 Ubuntu Unix
关于Linux操作系统,你必须要知道的事
我们可以看到无论是Debian还是Buildroot都有各自的特点,为客户提供了更大的选择空间和灵活性,大家可以根据自己的需求选择合适的版本来满足终端用户的体验和功能需求。从平技术将会一直关注更多更安全、灵敏、易于开发的Linux版本,做好适配工作,不断为客户带来“简单开发、方便应用”的使用体验。
|
7月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
7月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
391 5
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
360 13
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
439 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。

热门文章

最新文章