linux-进程(1)

1.冯诺依曼体系结构

在讲解进程之前,要先知道什么是冯诺伊曼体系结构。冯诺依曼体系结构是如今最主流的体系结构,所有的硬件可以分为5大单元,单元之间存在交互。

运算器和控制器就是cpu,运算器就是帮助计算机做运算的,控制器就是控制硬件之间的交互。

输入设备最常见的就是键盘,话筒,鼠标.....

输出设备最常见的就是声卡,显示屏,磁盘......

当然有些设备既做输入,也做输出.......

存储器指的就是内存,内存有个特点就是掉电易失,就是说没电了数据容易丢失。

但是磁盘就是永久性存储介质,即使没电数据也会在,是个输入或者输出设备。

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

这里的存储器指的是内存。

不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

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

各个设备之间是独立的,但是通过电路,各个设备又是连接起来的,目的是为了设备之间的数据流动。

数据的流动就是从这个设备拷贝到另外一个设备,那么拷贝的速度快慢就决定了计算机效率的快慢。

 那么输入设备和输出设备之间存在一个cpu来快速计算不就可以了吗?为什么要使用存储器来减慢速度呢?因为存储器的造价,效率,单体容量都是适中的的。而输入和输出设备的速度太慢了,如果直接将数据交给cpu的话,又太快了,那么数据一交给cpu,cpu一下子就计算完成了,那么整体的效率也就变慢了。那么此时存储器就很重要了,可以调和这个效率,输入设备将数据给存储器,存储器将数据交给cpu计算,然后将计算好的数据返回给存储器,再由存储器交给输出设备。

那么这样做的话不就是增加了拷贝数据的次数吗?怎么会变得更快呢?那么在cpu计算数据1的时候,数据2已经通过输入设备加载到了存储器,这就是预加载,在cpu计算数据2的时候,数据1已经被存放在了存储器,输出设备需要的时候就直接从存储器拿,这就是缓存,通过预加载和缓存就能提高计算机的效率

正是因为冯诺依曼这种体系结构引入了内存,将效率问题转化成了软件问题,使得内存快慢决定计算机的快慢,让大家能使用效率不错i的计算机。


2.操作系统(Operator System)

2.1概念

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

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

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

2.2设计OS的目的

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

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

os是怎么管理硬件的呢?每一款硬件设备都有对应的厂商,每家厂商都会为硬件设计软件,也就是驱动程序来管理硬件,所以os只需要管理硬件对应的驱动程序就行了。  

管理硬件资源是手段,为的是为用户提供良好的执行环境,那么用户想要使用硬件设备的时候,就直接去访问os吗?不是的,os内有大量的数据,如果给用户直接访问的话,就不安全,所以用户需要使用系统调用的接口来调用os,防止用户直接访问os,提高了安全性。

scanf和printf都使用了硬件设备,那么这两个函数的底层一定封装了系统调用,只有这样才能通过系统调用来使用硬件设备,用户不能直接跳过系统调用接口来调用os,也不能跳过os来使用硬件设备。

2.3定位

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

2.4总结

计算机管理硬件

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

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


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

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

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


4.进程

4.1基本概念

课本概念:程序的一个执行实例,正在执行的程序等

内核观点:担当分配系统资源(CPU时间,内存)的实体。

我们平时写的程序会存放在哪里呢?大家都知道程序是二进制文件,那么就存放在磁盘中, 磁盘就是硬件设备。那么当我们运行起来这个文件,根据冯诺依曼体系结构,这个文件会先加载到内存中,然后再被cpu进行计算。 

我们在使用计算机的时候,可以同时启动很多个程序,那么就代表着内存中可以加载很多个文件,那么os就需要对这些加载到内存的文件进行管理,那么os怎么进行管理呢?先描述,在组织。

4.2描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

课本上称之为PCB(process control block), Linux操作系统下的PCB是: task_struct

4.2.1task_struct-PCB的一种

在Linux中描述进程的结构体叫做task_struct。

task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

4.2.2task_ struct内容分类 

标示符: 描述本进程的唯一标示符,用来区别其他进程。

状态: 任务状态,退出代码,退出信号等。

优先级: 相对于其他进程的优先级。

程序计数器: 程序中即将被执行的下一条指令的地址。

内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。

记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

其他信息

那么有了PCB之后os就认识了这些程序,因为PCB描述了这些程序的属性。那么os管理进程就变成了管理PCB的链表。

4.3组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

4.4查看进程

进程的信息可以通过 /proc 系统文件夹查看

如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹

大多数进程信息同样可以使用top和ps这些用户级工具来获取

当我编译下面这段代码生成可执行程序时,再将它运行起来,就有了一个进程,那么我们怎么知道有一个进程了呢?

使用下面这段指令,就能查到这个可执行程序对应的进程,第二行就是对应的进程。

那么第三行是什么呢?grep这个指令执行起来后也会变成一个进程,所以第三行是grep这个指令执行后所产生的进程。所以可以得出一个结论:几乎所有独立的指令,都是一个程序,执行后都会变成进程!
 

 需要注意的是进程是有生命的,如果进程结束了就查不到了,所以我们可以使用do-while的指令查看到进程从开始到结束的全过程。


 今天的分享到这里就结束了,感谢大家的阅读!

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

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

相关文章

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞:[XM…

OmniGraffle Pro for mac 出色的图形设计软件

OmniGraffle Pro是一款非常出色的图形设计软件,它主要适用于Mac和iPad平台,可以用来轻松绘制各种精美的图表、示意图和界面设计。 软件下载:OmniGraffle Pro for mac中文注册激活版 以下是OmniGraffle Pro的一些主要特点和功能: 界…

How to install JDK on mac

文章目录 1. Install JDK on mac2. zshenv, zshrc, zprofile3. 查看java环境变量配置 1. Install JDK on mac Installation of the JDK on macOS 2. zshenv, zshrc, zprofile How Do Zsh Configuration Files Work? 3. 查看java环境变量配置 open Terminal,cd…

六、Django开发

六、Django开发 1.新建项目2.创建app2.1 第一种方法:2.2 利用pycharm中tools工具直接创建app 3.设计表结构(django)4.在MySQL中生成表5.静态文件管理6.部门管理6.1 部门列表 7.模板的继承8.用户管理8.1初识Form1.views.py2.user_add.html 8.2…

JMeter基础用法和测试WebSocket请求

目录 JMeter websocket插件安装测试接口的编写添加测试线程组创建取样器创建WebSocket连接创建循环控制器创建WebSocket request-response Sampler创建固定定时器 正则匹配上一个请求的数据做为当前请求参数正则编写使用匹配值 CSV文件读取参数添加汇总报告和结果树 JMeter web…

重读 Java 设计模式: 深入探讨原型模式,灵活复制对象

引言 在软件开发中,经常会遇到需要创建对象的情况。有时候,我们希望创建一个新的对象,但又不想通过传统的构造方法来创建,而是希望通过复制一个现有对象的方式来创建新的对象。这时,原型模式就能派上用场了。原型模式…

【漏洞复现】WordPress Plugin LearnDash LMS 敏感信息暴漏

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin LearnDash LMS 4.10.2及之前版本存在安全漏洞&#x…

吴恩达2022机器学习专项课程(一) 4.4 学习率

问题预览/关键词 学习率太小有什么影响?学习率太大有什么影响?如果成本函数达到局部最小值,使用梯度下降还能继续最小化吗?为什么学习率固定,而最小化成本函数的步幅却越来越缓?如何选择合适的学习率&…

Mac 版 IDEA 中配置 GitLab

一、安装Git 在mac终端输入Git检测指令&#xff0c;可以通过git命令查看Git是否安装过&#xff0c;如果没有则会弹出安装按钮&#xff0c;如果安装过则会输出如下信息。 WMBdeMacBook-Pro:~ WENBO$ git usage: git [--version] [--help] [-C <path>] [-c namevalue][--…

Kafka 学习之:基于 flask 框架通过具体案例详解生产消费者模型,这一篇文章就够了

文章目录 案例信息介绍后端异步处理请求和后端同步处理请求同步方式异步方式 环境文件目录配置.envrequirements.txt 完整代码ext.pyapp.pykafka_create_user.py 运行方式本地安装 kafka运行 app.py使用 postman 测试建立 http 长连接&#xff0c;等待后端处理结果发送 RAW DAT…

Python之Opencv进阶教程(1):图片模糊

1、Opencv提供了多种模糊图片的方法 加载原始未经模糊处理的图片 import cv2 as cvimg cv.imread(../Resources/Photos/girl.jpg) cv.imshow(girl, img)1.1 平均值 关键代码 # Averaging 平均值 average cv.blur(img, (3, 3)) cv.imshow(Average Blur, average)实现效果 1.2…

this.$route.back()时的组件缓存

1.this.$route.back()回到上一个路径会重新加载 跳转时,前一个路由的内容会被销毁,当回来时,重新创建树,组件内有保存了距离,没有一开始是0. 2.keep-alive写在router-view上面,这个地方所代表的路由会被保存,因此可以写在上面,保存,当返回时,如果是这个路由,里面的内容是一样…

Linux学习:进程(4)程序地址空间(笔记)

目录 1. Linux下各种资源的内存分布2. 物理地址与虚拟(线性)地址3. 程序地址空间的区域划分4. 地址映射与页表5. 缺页中断 1. Linux下各种资源的内存分布 2. 物理地址与虚拟(线性)地址 在有关进程创建的初步学习中&#xff0c;我们了解了fork函数创建子进程的方式。此种进程的创…

云计算探索-如何在服务器上配置RAID(附模拟器)

一&#xff0c;引言 RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种将多个物理硬盘组合成一个逻辑单元的技术&#xff0c;旨在提升数据存取速度、增大存储容量以及提高数据可靠性。在服务器环境中配置RAID尤其重要&#xff0c;它不仅能够应对高并发访…

力扣Lc25--- 821. 字符的最短距离(java版)-2024年3月31日

1.题目描述 2.知识点 从左向右遍历&#xff1a; 这一遍历可以帮助我们找到每个位置到其左边最近的目标字符的距离。 从右向左遍历&#xff1a; 这一遍历可以帮助我们找到每个位置到其右边最近的目标字符的距离&#xff0c;并将这个距离与之前从左向右遍历得到的距离进行比较&…

腾讯云轻量2核2G3M云服务器优惠价格61元一年,配置详解

腾讯云轻量2核2G3M云服务器优惠价格61元一年&#xff0c;配置为轻量2核2G、3M带宽、200GB月流量、40GB SSD盘&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云轻量2核2G云服务器优惠价格 腾讯云&#xff1a;轻量应用服务器100%CPU性能…

Linux速览(2)——环境基础开发工具篇(其一)

本章我们来介绍一些linux的常用工具 目录 一. Linux 软件包管理器 yum 1.什么是软件包? 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 5.yum补充 6. 关于 rzsz 二. Linux编辑器-vim使用 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式…

【核弹级软安全事件】XZ Utils库中发现秘密后门,影响主要Linux发行版,软件供应链安全大事件

Red Hat 发布了一份“紧急安全警报”&#xff0c;警告称两款流行的数据压缩库XZ Utils&#xff08;先前称为LZMA Utils&#xff09;的两个版本已被植入恶意代码后门&#xff0c;这些代码旨在允许未授权的远程访问。 此次软件供应链攻击被追踪为CVE-2024-3094&#xff0c;其CVS…

数据结构——二叉树——堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

docker-compose命令管理docker命令集合

Docker-Compose 简介 Docker-Compose 项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose 项目由 Python 编写&#xff0c;调用 Docker 服务提供的API来对容器进行管理。因此&#xff0c;只要所操作的平台支持 Docker API&#xff…
最新文章