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

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

相关文章
|
18天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
12天前
|
消息中间件 安全 算法
深入理解操作系统:进程管理的艺术
【10月更文挑战第38天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是硬件与软件的桥梁,更是维持计算机运行秩序的守夜人。本文将带你走进操作系统的核心——进程管理,探索它是如何协调和优化资源的使用,确保系统的稳定与高效。我们将从进程的基本概念出发,逐步深入到进程调度、同步与通信,最后探讨进程安全的重要性。通过这篇文章,你将获得对操作系统进程管理的全新认识,为你的计算机科学之旅增添一份深刻的理解。
|
16天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
38 3
|
17天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
19天前
|
算法 调度 UED
深入理解操作系统的进程调度机制
本文旨在探讨操作系统中至关重要的组成部分之一——进程调度机制。通过详细解析进程调度的概念、目的、类型以及实现方式,本文为读者提供了一个全面了解操作系统如何高效管理进程资源的视角。此外,文章还简要介绍了几种常见的进程调度算法,并分析了它们的优缺点,旨在帮助读者更好地理解操作系统内部的复杂性及其对系统性能的影响。
|
20天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
36 2
|
20天前
|
消息中间件 算法 Linux
深入理解操作系统之进程管理
【10月更文挑战第30天】在数字时代的浪潮中,操作系统作为计算机系统的核心,扮演着至关重要的角色。本文将深入浅出地探讨操作系统中的进程管理机制,从进程的概念入手,逐步解析进程的创建、调度、同步与通信等关键过程,并通过实际代码示例,揭示这些理论在Linux系统中的应用。文章旨在为读者提供一扇窥探操作系统深层工作机制的窗口,同时激发对计算科学深层次理解的兴趣和思考。
|
21天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度策略
【10月更文挑战第29天】本文将带领读者深入探讨操作系统中的核心组件之一——进程,并分析进程管理的重要性。我们将从进程的生命周期入手,逐步揭示进程状态转换、进程调度算法以及优先级调度等关键概念。通过理论讲解与代码演示相结合的方式,本文旨在为读者提供对进程调度机制的全面理解,从而帮助读者更好地掌握操作系统的精髓。
31 1
|
16天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理的艺术
【10月更文挑战第33天】本文旨在揭示操作系统中进程管理的神秘面纱,带领读者从理论到实践,探索进程调度、同步以及通信的精妙之处。通过深入浅出的解释和直观的代码示例,我们将一起踏上这场技术之旅,解锁进程管理的秘密。
21 0
|
18天前
|
算法 Linux 调度
深入理解操作系统之进程调度
【10月更文挑战第31天】在操作系统的心脏跳动中,进程调度扮演着关键角色。本文将深入浅出地探讨进程调度的机制和策略,通过比喻和实例让读者轻松理解这一复杂主题。我们将一起探索不同类型的调度算法,并了解它们如何影响系统性能和用户体验。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇理解操作系统深层工作机制的大门。
26 0
下一篇
无影云桌面