Linux--进程(一篇博客让你理解操作系统的底层)

news2024/11/17 9:33:18

Linux–进程

本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~

进程目录

  • Linux--进程
  • 一、冯诺依曼体系结构
      • 1.1外围设备
      • 1.2中央处理器(CPU)
      • 1.3存储器(内存)
        • 1.3.1什么是内存?
      • 1.4总结
  • 二、数据流的流向理解
  • 三、操作系统(Operator System)
    • 1.概念
    • 2.设计OS的目的
    • 3.定位
    • 4.如何理解 "管理"
    • 5.操作系统为什么对软硬件资源进行管理
    • 6.系统调用和库函数概念
  • 四、总结

一、冯诺依曼体系结构

  身为一个程序员,我们必须要了解冯诺依曼体系结构,比如我们常见的笔记本电脑,不常见的计算机,如云服务器等,绝大多数都遵循我们的冯诺依曼体系结构。

在这里插入图片描述

1.1外围设备

输入输出设备我们称之为外围设备,简称外设,外设一般都会比较慢一些,以磁盘为例,相比于我们的计算机内存,磁盘是很慢的。

我们先来看一下我们的输入设备:

输入设备顾名思义就是我们使用的将信息传递进入计算机的设备,如我们的麦克风,摄像头,键盘,网卡磁盘

接下来是我们的输出设备:

输出设备就是将计算机处理好的信息传递给我们用户的设备,比如我们的显示器,网卡磁盘声卡,音响…

在这里可能有人就会疑惑了,某个设备可以既是输入设备又是输出设备吗?

当然可以啦!我们的网卡,磁盘就同时是输入设备又是输出设备。

关于冯诺依曼,必须强调几点

1.这里的存储器指的是内存

2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

4.一句话,所有设备都只能直接和内存打交道。

1.2中央处理器(CPU)

  中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。
  在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。

  通俗点说,CPU就是计算机处理数据,运算和控制的核心,从内存中读取数据然后经过CPU处理解密之后返回给内存,在从内存向输出设备输出给我们的用户。

  那么问题就来了,为什么我们还要多一个存储器(内存)呢?直接从输入设备拿数据然后给CPU处理后返回给输出设备不就好了吗?也就是如下结构:

在这里插入图片描述

​   原因是我们的CPU运算速度是非常非常快的,但是我们外设的速度相对来说会慢很多,我们根据木桶原理,外设这里速度很慢导致我们的CPU大部分时间没有事情可做,整体效率就是以外设决定,导致计算机的运算速度大幅度降低,所以我们就有了冯诺依曼体系结构里面的另一个重要的部分——存储器

1.3存储器(内存)

我们这里的存储器指的是内存

1.3.1什么是内存?

  内存(Memory) 是计算机中最重要的部件之一,它是程序与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,内存又被称为主存,其作用是存放CPU中的运算数据, 以及与硬盘等外部存储设备交换的数据。

  只要计算机在运行中, CPU就会把需要运算的数据调到主存中进行运算, 当运算完成后CPU再将结果传送出来, 主存的运行也决定了计算机的稳定运行

  我们的CPU掉电易失数据,但是我们的内存就不会这样,只要数据放在了内存里面,掉电也不会丢失数据。

  我们的存储器(内存)就是为了提高计算机的效率,有了内存之后我们的外设就向内存写入数据和读取数据,CPU只和我们的存储器交互,不和我们的外设交互,外设也只和我们的存储器交互不和CPU交互

  同时我们要知道的是我们的存储器(内存)性价比相对来说很高。

  因为有了内存的存在,我们就可以对数据做预加载,CPU以后在进行数据计算的时候,根本就不需要访问外设了,而只要直接伸手向内存要就可以啦,我们计算机的效率也就大大提高了。

1.4总结

结论1:在数据层面,一般CPU不和外设直接沟通,而是直接和内存打交道

结论2:外设只会和内存打交道------数据层面

接下来我们理解一个问题:可执行程序是不是一个文件呢?

答案是肯定的,可执行程序是一个文件,它存储在磁盘里,向外设输出。

为什么我们的程序必须先被加载到内存中呢?

因为是由我们的冯诺依曼体系结构决定的! ./bin.exe

二、数据流的流向理解

  我们在这里要看一下在硬件层面,单机和跨主机之间数据流是如何流向的!

  我们先举一个例子,我们每个人现在离不开的一个工具就是聊天软件,我们来看看整个信息是如何在体系结构中流动的。

在这里插入图片描述

三、操作系统(Operator System)

接下来就要进入我们的重点知识,操作系统的讲解了。

1.概念

  任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理)

其他程序(例如函数库,shell程序等等)

2.设计OS的目的

与硬件交互,管理所有的软硬件资源

为用户程序(应用程序)提供一个良好的执行环境

3.定位

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的搞管理的软件

通俗点来讲:我们的操作系统就是进行软硬件资源管理的软件

4.如何理解 “管理”

  首先我们通过一个具体的例子来帮助我们理解操作系统是如何对硬件做管理的:

在这里插入图片描述

上述行为就是对我们管理做建模,我们分析如下:

管理的本质:对被管理对象的数据做管理

1.管理者和被管理者其实是不需要直接接触沟通的!

2.管理者和被管理者没有直接接触怎么管理数据的呢?

辅导员(硬件驱动)

管理的本质:先描述,在组织

描述:将抽象数据具体化的过程,如结构体等

组织:将具体化的数据,如结构体通过数据结构的方式管理

总结:

计算机管理硬件

  1. 描述起来,用struct结构体

  2. 组织起来,用链表或其他高效的数据结构

5.操作系统为什么对软硬件资源进行管理

  我们操作系统对下通过管理好软硬件资源(手段),对上给用户提供良好(安全,稳定,高效,功能丰富等)执行环境(目的)

6.系统调用和库函数概念

  操作系统给我们提供非常良好的服务,并不表示OS会相信我们,反而,操作系统不相信任何人!!!

  我们使用操作系统并不是直接进入操作系统内部操作,操作系统也要保证自己的安全,所以它不会让我们为所欲为。

  在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

  系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

在这里插入图片描述

Linux底层实现是C语言

四、总结

  本篇博客主要是进程学习的铺垫,涉及冯诺依曼体系结构,数据流的流向理解以及操作系统的理解,由浅入深,重点讲解我们的Linux是怎么管理我们的进程的,图形结合可以帮助大家更快的理解我们的进程~希望这篇博客可以帮助到大家!

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

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

相关文章

【LeetCode20】有效的括号——图解

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

【Java校招面试】实战面经(三)

目录 前言一、简历中项目的难点及解决方案二、讲讲分布式锁的实现三、AQS(Abstract Queued Synchronizer)的原理四、ConcurrentHashMap的原理五、MySQL InnoDB存储引擎中的MVCC解决了什么问题,MVCC的实现原理六、平时怎么创建线程?为什么用线程池&#x…

Red Hat Enterprise Linux (RHEL) 8.8 正式版发布

红帽企业 Linux 8.8 发布 Red Hat Enterprise Linux (RHEL) 8.8 (x86_64, aarch64) Release 请访问原文链接:https://sysin.org/blog/rhel-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023年 5月 16日&…

Java学习路线(5)——数组

一、数组的概念 数组是用来存储一系列同类型数据的内存区域。 二、存储数据 1、静态初始化数组 作用: 定义数组时直接赋值。 格式: 【数据类型[] 变量名 new 数据类型[]{值1,值2…,值n}】 示例: double[] height {172.5,170.1,145.1,152.5,…

java常用工具之Scanner类

目录 简介一、扫描控制台输入1.1nextLine1.2nextInt1.3其他方法 二、扫描文件三、查找匹配项四、小结 简介 Java 的 Scanner 类是一个方便在控制台扫描用户输入的工具类,虽然它也可以扫描文件内容,但我们通常更喜欢它扮演前面的角色,因为扫描…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数(KeyedProcessFunction)1.处理…

【Linux进阶之路】基本权限的理解

文章目录 一.用户1.分类2.su3.su-4.sudo 二.文件1.文件分类2.文件权限3.文件权限的身份4.chmod——改写文件权限第一种方式第二种方式 5.chown——改写文件拥有者身份6.chgrp ——改写文件所属组身份7.umask ——设置权限掩码8.目录权限9.粘滞位——特殊的可执行权限 一.用户 …

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

ES6之生成器

文章目录 前言一、生成器是什么?二、生成器总结 前言 生成器 一、生成器是什么? 生成器就是一个特殊的函数,实现异步编程。格式function *名称(){...} (这个*靠近function写,靠近名称写,或者两边空格都不靠近均正确)…

[比赛简介]Parkinson‘s Freezing of Gait Prediction

比赛链接:https://www.kaggle.com/competitions/tlvmc-parkinsons-freezing-gait-prediction 比赛简介 本次比赛的目标是检测步态冻结(FOG),这是一种使人衰弱的症状,困扰着许多帕金森病患者。您将开发一个机器学习…

YOLO V3 SPP ultralytics 第三节:关于yolo 中cfg的网络配置信息和读取cfg配置文件

目录 1. 介绍 2. 关于yolo的cfg网络配置文件 2.1 关于卷积层 2.2 关于池化层 2.3 关于捷径分支shortcut 2.4 关于route 层 2.5 关于上采样层 2.6 关于yolo层 3. 解析cfg 文件 4. 代码 1. 介绍 根据 第二节 的步骤,生成了属于自己的 my_yolov3.cfg 配置…

Python 墨西哥湾流(gulf stream)可视化

背景介绍 墨西哥湾流和黑潮分别是北半球两支强大的西边界流,墨西哥湾流的流速还要强于黑潮,也是温盐环流的重要组成部分。 引入涡度的概念,将涡度分为两个部分: 1、行星涡度,记为 f f f,与地球自转有关…

【软考数据库】第十四章 数据库主流应用技术

目录 14.1 分布式数据库 14.2 Web与数据库 14.3 XML与数据库 14.4 面向对象数据库 14.5 大数据与数据库 14.6 NewSQL 前言: 笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。 14.1 …

Springcloud1---->openFeign

目录 简介快速入门导入依赖开启Feign配置Feign客户端接口Feign使用小结feign feign配置负载均衡feign配置Hystix支持 简介 Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切…

WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

目录 1、WebSocket 诞生背景 2、WebSocket的特点: 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端: 6、QWebSocket通讯—服务端: 1、WebSocket 诞生背景 早期,很多网站为了实现推送技术,所用的技术都…

初始Linux发展

目录 前言 Linux概念: 一.Linux发展历史 二.Linux的发展现状 三.发行版本 四.Linux 环境的搭建方式 主要有三种 : 4.6下载方式: 五.XShell软件 前言 Linux概念: Linux,全称GNU/Linux,是一套免费使用和自由传播的…

python中的对象和变量的关系

这里写目录标题 对象简介对象的结构变量和对象 对象简介 Python是一门面向对象的编程语言! 一切皆对象! 程序运行当中,所有的数据都是存储到内存当中然后再运行的! 对象就是内存中专门用来存储指定数据的一块区域 对象实际上就是…

《计算机网络—自顶向下方法》 Wireshark实验(九):DHCP 协议分析

DHCP(Dynamic Host configuration protocol)动态主机配置协议,它可以为客户机自动分配 IP 地址、子网掩码以及缺省网关、DNS 服务器的 IP 地址等 TCP/IP 参数, 简单来说,就是在 DHCP 服务器上有一个数据库,…

Go开发PaaS平台核心功能

Go开发PaaS平台核心功能 1 云原生PaaS平台介绍 随着云计算的发展,越来越多的企业逐步的把IT资源迁移到云上。PaaS平台作为基础设施基座,可以帮助企业快速构建功能丰富的容器云平台,提升交付效率,降低成本。 [1.1] 云原生平台使…

【SpringMVC框架】--01.简介、入门、@RequestMapping、获取请求参数、域对象共享数据、视图、RestFul

文章目录 SpringMVC1.简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点 2.编写HelloWorld2.1 创建maven工程2.2 配置web.xml2.3 创建请求控制器2.4 创建springMVC的配置文件2.5测试HelloWorld2.6总结 3.RequestMapping注解3.1 RequestMapping注解的功能3.2 RequestMap…