Linux进程(1)(结构-操作系统-进程)

目录

1.体系结构

 2.操作系统(Operator System)

1)概念:

2)结构 示意图(不完整)

3)尝试理解操作系统

4)系统调用和库函数概念

3.认识进程

1.启动

2.进程创建的代码方式 --- 重操作,轻原理

1)创进程

2)我们为什么要创建子进程呢? 


1.体系结构

输入设备:键盘、鼠标、摄像头、话筒、磁盘、网卡......

输出设备:显示器、声卡、磁盘、网卡......

CPU:运算器、控制器

存储器:内存

数据是要在计算机的体系结构中进行流动的,流动过程中,进行数据的加工处理从一个设备到另一个设备,本质:是一种拷贝!!!

又因为中央处理器的运行速度非常之快,因此数据设备间的拷贝的效率,决定了计算机整机的基本效率!

存储:距离CPU越近,效率越高,成本越高

若没有存储器,而是直接将CPU位于输入和输出设备两者的中间,那么将会导致一个类似于木桶效应似的缺点(装水的多少不是由长板子决定的,而是由短板子决定的),若是这样放置,由于输入输出设备拷贝的速度相比CPU来说非常的慢,导致CPU大部分时间不是在处理数据,而是在等待输入输出设备拷贝数据。

CPU 的速度远远快于外部设备(如磁盘、光驱等),内存作为介于 CPU 和外部设备之间的媒介,可以帮助平衡这种速度差异CPU 可以快速地从内存中读取或写入数据,而内存则可以暂时存储来自外部设备的数据,使得 CPU 不必等待外部设备完成读写操作。

因此要在三者间设置一个存储器。

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上 qq 开始和某位朋友聊 天开始,数据的流动过程。
  1. 输入设备:您在电脑或手机等设备上输入登录 QQ 的账号、密码以及与朋友聊天的信息,这些输入设备(如键盘、触摸屏)将您的操作转换为电信号。

  2. 存储器:输入的数据首先被存储在本地设备的存储器(如内存)中。

  3. 控制器:控制器指挥数据的流动和处理,它协调各个部件的工作,将登录和聊天数据发送到运算器进行处理。

  4. 运算器:对登录和聊天数据进行处理,如加密、编码等操作。

  5. 输出设备:处理后的数据通过网络接口(可视为一种输出设备)发送到网络中。

  6. 网络传输:数据通过网络以数据包的形式传输,经过多个路由器和网络节点,最终到达 QQ 服务器。

  7. QQ 服务器接收:服务器的输入设备接收数据包,数据存储在服务器的存储器中。

  8. 服务器处理:服务器的控制器和运算器对数据进行处理,如验证登录信息、查找接收方的连接信息、转发聊天数据等。

  9. 服务器输出:处理后的聊天数据再次通过网络发送给接收方的设备。

  10. 接收方设备接收:接收方设备的输入设备接收数据,经过类似的处理流程,最终在输出设备(如屏幕)上显示聊天内容。

在硬件数据流动角度,在数据层面:


1.CPU不和外设直接打交道,CPU只和内存打交道

2.外设(输入和输出)的数据,不是直接给CPU的,而是先要放入内存中

 2.操作系统(Operator System

1)概念:

是一款软件,对软硬件资源进行管理的软件

广义上的认识:操作系统的内核 + 操作系统的外壳周边程序(给用户提供使用操作系统的方式)

狭义上的认识:只是操作系统的内核

2)结构 示意图(不完整)

3)尝试理解操作系统

管理好,不需要管理者和被管理者直接接触

管理的本质不是对被管理的对象做管理,而是对被管理者的数据做管理

任何管理,要建模:

先描述,再组织

先把被管理对象先描述起来,有几个被管理对象,就把几个被管理对象所对应的数据对象用特定的数据结构组织起来

C++语言中封装 --- 就是描述对象!!!        而它的STL则是组织方式

比如实践通讯录时,要先构建结构体,然后定义   本质上就是先描述,再组织

所以凡是要对特定的对象进行管理:都是先描述,再组织

任何上层用户想要访问操作系统的功能,都必须直接或间接的使用系统调用(system call),而不是直接访问

4)系统调用和库函数概念
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

3.认识进程

在操作系统中,进程可以同时存在非常多!!!

进程 = PCB( process control block) +自己的代码和数据
这样以来,对进程的管理,就变成了 对链表的增删查改!!!
为什么要有PCB呢?? ----  因为OS要对进程进行管理!!    先描述,再组织
Linux操作系统下的PCB : task_struct
进程 = 内核task_struct结构体 + 程序的代码和数据
1.启动

a. ./XXXX,本质就是让系统创建进程并运行 --- 我们自己写的代码形成的可执行 == 系统命令 == 可执行文件。在linux中运行的大部分指令操作,本质都是运行进程!!!


b. 每一个进程都要有自己的唯一标识符,叫做进程pid


c. 一个进程,想知道自己的pid???
d. ctrl +c 就是在用户层面终止进程, kill -9 pid 可以用来直接杀掉进程
2.进程创建的代码方式 --- 重操作,轻原理
1)创进程

fork()

开启监视窗口指令:

while :; do ps axj | head -1 && ps axj | grep myprocess | grep -v grep; sleep 1; done

第二个出现的进程,他的ppid为第一个进程的pid,因此下一个进程为上一个进程的子进程

在fork之后,父子代码共享
创建一个进程,本质是系统中多了一个进程,多了一个进程,就是多了--->
1.内核task_struct
2 有自己的代码和数据
父进程的代码和数据是从磁盘加案的子进程的代码和教据?? 默认情况继承父进程的代码和教据
2)我们为什么要创建子进程呢? 

我们想让子进程头行和父进程执行不一样的代码

即返回给父进程一个PID,子进程一个0.
fork()是一个函数吗,答案是是的,只不过是有OS提供的
那么问题又来了,为什么fork()这个函数能提供两个返回值呢?
原因是当我们执行到 return 的时候,函数的核心工作已做完了,这时候是不是 子进程已经存在了(即可以被调度使用了!!),因此return执行两次也不是很奇怪吧
进程一定要做到:
进程具有独立性(即一个进程被杀掉,不会影响别的进程)--  因此当你杀掉父进程时,不会影响子进程的运行。
进程 = 内核数据结构task_struct + 代码和数据
其中代码是只读的,不可修改,因此父子 共用代码,但是 数据不一样,父子各自独立,原则上数据要分开
(exe)即进程的pcb中会记录自己对应的可执行程序的路径
(cwd)即进程当前的工作路径!!
当程序在运行时,这时我们把他的exe可执行文件删除会怎么样呢?
虽然已经被删除,但是我们会发现该程序还在运行着:
这又是为什么呢?
因为 原则上一个程序要被变成进程调度,他就已经在内存中以及存在一份了,这时候你把他在磁盘上的可执行程序删除时,还能跑。
那为什么是原则上呢?
因为当该程序 在磁盘上的占用空间大于内存空间时,接着跑下去肯定会出现问题的。
每个进程在启动的时候,会记录自己当前在哪个路径下启动,进程的当前路径
这里将当前工作路径做了修改,导致其新生成的log.txt并不在默认的当前工作目录(exe所在位置),而是在修改过后的位置

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

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

相关文章

C#用反射机制调用dll文件的字段、属性和方法

1、创建dll文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace CLStudent {public class Student{//字段public string Name "Tom";//属性public double ChineseScore { get; s…

Nginx-http_auth_basic_module使用

文章目录 前言一、ngx_http_auth_basic_module二、指令1.auth_basic1.auth_basic_user_file 示例生成密码文件配置basic认证浏览器验证 总结 前言 nginx可以通过HTTP Basic Authutication协议进行用户名和密码的认证。 一、ngx_http_auth_basic_module 生效阶段: …

【C++】开源:nlohmann/json数据解析库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍nlohmann/json数据解析库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…

计算机组成原理--概述

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

Jetpack Compose实战教程(五)

Jetpack Compose实战教程(五) 第五章 如何在Compose UI中使用基于命令式UI的自定义View 文章目录 Jetpack Compose实战教程(五)一、前言二、本章目标三、开始编码3.1 先让自定义控件能跑起来3.2给自定义控件使用compose的方式赋值…

在linux系统centos上面安装php7gmp扩展

ps:在ubuntu上面安装gmp(最简单) $ sudo apt-get install php7.0-gmp然后再php.ini添加extensionphp_gmp.so <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<…

C#Modbus通信

目录 1&#xff0c;辅助工具。 2&#xff0c;初识Modbus。 3&#xff0c;基于ModbusRTU的通信。 3.1&#xff0c;RTU与ASCII模式区别 3.2&#xff0c;Modbus存储区 3.3&#xff0c;报文格式 3.4&#xff0c;异常代码 3.5&#xff0c;详细文档连接 。 3.6&#xff0c;代…

2024 年第十四届亚太数学建模竞赛(中文赛项)浅析

需要完整B题资料&#xff0c;请关注&#xff1a;“小何数模”&#xff01; 本次亚太(中文赛)数学建模的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&…

纸飞机社工库

收集了一些比较好用的纸飞机社工库&#xff0c;有纸飞机的可以加一下 Space X 隐私信息查询平台https://t.me/SpaceSGK_bot?startKhbOsEdELmingeek社工库 https://t.me/ingeeksgkbot?startNzM3ODE5NDM5Nw Botnet免费社工机器人https://t.me/SGK_0001_bot?start7378194397暗…

TZDYM001矩阵系统源码 矩阵营销系统多平台多账号一站式管理

外面稀有的TZDYM001矩阵系统源码&#xff0c;矩阵营销系统多平台多账号一站式管理&#xff0c;一键发布作品。智能标题&#xff0c;关键词优化&#xff0c;排名查询&#xff0c;混剪生成原创视频&#xff0c;账号分组&#xff0c;意向客户自动采集&#xff0c;智能回复&#xf…

【C++ | 继承】C++的继承详解 及 例子源码演示

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

信用卡没逾期就万事大吉了吗?

6月28日&#xff0c;中国人民银行揭晓了《2024年第一季度支付体系概览》&#xff0c;数据显示&#xff0c;截至本季度末&#xff0c;信用卡及借贷合一卡的总量为7.6亿张&#xff0c;与上一季度相比&#xff0c;这一数字微降了0.85个百分点。同时&#xff0c;报告还指出&#xf…

AE的合成

目录 合成的概念 合成设置 预设 像素长宽比 分辨率​编辑 开始时间码和持续时间 背景颜色 合成的实战理解 在AE的操作界面中&#xff0c;当我们新建了一个项目之后&#xff0c;画面中最主要的位置显示的是新建合成 合成的概念 AE是一款专业特效合成软件&#xff0c;可…

【吊打面试官系列-MyBatis面试题】MyBatis 实现一对一有几种方式?具体怎么操作的?

大家好&#xff0c;我是锋哥。今天分享关于 【MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyBatis 实现一对一有几种方式?具体怎么操作的&#xff1f; 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询…

【记录】如何使用IDEA2023

前言&#xff1a; 记录IDEA2023的激活与安装 第一步&#xff1a;官网下载安装包&#xff1a; 下载地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 这个最好选择2023版本&#xff0c;用着很nice。 安装步骤就不详解了&#xff0c;无脑下一步就可以了…

【并发编程】-3.锁的类型、CAS、UNSAFE、原子操作

锁的类型 可重入锁和不可重入锁 可重入锁&#xff1a;一个线程可以多次抢占同一个锁&#xff1b;Synchronized、ReentrantLock都是可重入锁&#xff0c;用Synchronized进行锁的可重入测试&#xff0c;在同一个线程中定义childMethod()和childMethod2()两个方法&#xff0c;在这…

使用Github Actions自建Docker镜像仓库

使用Github Actions自建Docker镜像仓库 背景使用Github Actions自建Docker镜像仓库fork项目[docker_image_sync](https://github.com/xqxyxchy/docker_image_sync)获取云厂商容器镜像服务信息配置github secrets运行github action配置需要同步的镜像同步后效果华为云配置 背景 …

VCS+Vivado联合仿真BUG

场景&#xff1a; 在vcsvivado联合仿真过程中&#xff0c;对vivado导出的shell脚本修改&#xff0c;修改某些source文件路径&#xff0c;vcs编译时会报Permission Denied。 问题描述 对shell脚本修改如下&#xff1a; 修改仅为注释掉某一行&#xff0c;下面变为source文件新…

昇思25天学习打卡营第07天|函数式自动微分

神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#xff08;gradients&…

hid-ft260驱动学习笔记 1 - 驱动模块注册与注销

目录 1. ft260_driver_init初始化 1.1 tty设备 1.1.1 申请tty驱动设备 1.1.2 初始化tty驱动程序 1.1.3 注册tty设备 1.2 hid设备 2. ft260_driver_exit注销模块 3. 调试 hid-ft260.c的最底部可以看到该驱动的注册与注销接口的申明。 module_init(ft260_driver_init); …