首页 > 系统相关 >Linux进程(1)(结构-操作系统-进程)

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

时间:2024-07-07 17:56:34浏览次数:11  
标签:操作系统 代码 Linux 进程 数据 CPU 设备

目录

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所在位置),而是在修改过后的位置

标签:操作系统,代码,Linux,进程,数据,CPU,设备
From: https://blog.csdn.net/cy18779588218/article/details/140162992

相关文章

  • 在Linux中,当你需要给命令绑定⼀个宏或者按键的时候,应该怎么做呢?
    在Linux中,给命令绑定一个宏或者按键通常涉及到使用shell的内置命令或者编辑器(如vim)的宏定义功能。以下是详细的步骤和方法:1.使用bash的bind命令bashshell的bind命令允许你更改bash对键盘上按下的键和键组合的响应方式,从而实现宏或按键的绑定。基本步骤查找按键的字符序列:......
  • 在Linux中,内核调优配置文件名字有哪些?举例几个内核需要优化的参数配置?
    在Linux中,内核调优涉及到对系统内核的各种参数进行优化,以适应不同的工作负载和场景。这些参数主要存储在两个地方:一个是运行时动态可调的/proc/sys目录下的文件,另一个是持久化的配置文件/etc/sysctl.conf。1.内核调优配置文件/etc/sysctl.conf:这是最常用的内核参数配置文件,用......
  • 在Linux中,bash shell 中的 hash 命令有什么作用?
    在bashshell中,hash命令与命令查找和缓存机制紧密相关。当你输入一个命令时,bash需要找到该命令的可执行文件的位置(即其路径)以便执行它。bash有几种方式来完成这个任务,其中之一就是使用哈希表(hashtable)来缓存之前查找过的命令的路径。这就是hash命令发挥作用的地方。1.hash命令......
  • 在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正
    在Linux中,可以使用kill命令来终止正在运行的进程。要移除所有正在运行的进程,可以结合使用ps命令和xargs命令来实现。首先,我们可以使用ps命令列出所有正在运行的进程,然后通过管道(|)将结果传递给xargs命令,最后使用kill命令终止这些进程。具体操作如下:打开终端。输入以下命令:ps......
  • 在Linux中,哪⼀个bash内置命令能够进行数学运算?
    在Linux中,bashshell提供了多种方式进行数学运算,但严格来说,bash本身并没有一个专门的内置命令专门用于数学运算,而是通过一些特殊的语法和命令组合来实现。以下是一些常见的bash中进行数学运算的方法:1.使用$((expression))进行算术扩展这是bash中推荐的标准处理方法,用于执行基本......
  • 震惊!Linux 常用命令总结,不看必定后悔!!!
    Linux是一个强大的操作系统,拥有大量的命令行工具。以下是一些常用的Linux命令及其基本用法:ls -列出目录内容。ls:列出当前目录下的文件和文件夹。ls-l:以长格式列出详细信息,包括权限、所有者、大小等。ls-a:列出所有文件,包括隐藏文件。cd -改变当前目录。cd/path/......
  • 嵌入式Linux系统编程 — 7.2 进程的环境变量
    目录1什么是进程的环境变量2环境变量的作用3 应用程序中获取环境变量3.1 environ全局变量3.2 获取指定环境变量getenv4 添加/删除/修改环境变量4.1 putenv()函数添加环境变量4.2 setenv()函数4.3 unsetenv()函数1什么是进程的环境变量每一个进程都有一......
  • Linux 基础命令实例教程
    Linux是一个强大的操作系统,掌握其基本命令对任何级别的用户来说都是至关重要的。本文将通过具体的实例来演示一些常用的Linux命令,帮助你更好地理解和运用它们。1.文件和目录操作例:列出当前目录下的所有文件和目录ls-la这会列出当前目录下所有文件和目录的详细信息......
  • 将Linux做成路由器
    将Linux做成一个路由器主机名IPoe01192.168.200.170(外网)192.168.100.164(内网)oe02192.168.100.162(内网)通过这个规划表,oe02这个主机是只有一个内网网卡的,无法上网,我们需要将oe01这个Linux做成一个路由器,也就是从内网网卡收到的流量转发到外网网卡,然后出去路......
  • 进程信号
    1.信号的产生1.1信号概念在生活中有很多的信号在我们身边围绕,例如红绿灯,发令枪,上课铃等等在接受到信号,我们可以做出三种动作1.立马去做对应信号的事情2.等一会再做,有自己的事情或者更重要的事情3.直接忽视,不做信号是给进程发送的eg:kill-9pid进程本身是程序员......