当前位置: 首页 > news >正文

Linux 进程(一)

1 操作系统

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

        内核(进程管理,内存管理,文件管理,驱动管理)
        其他程序(例如函数库,shell程序等等)

1.1 管理概念 

        在计算机开启后,第一个被加载的软件就是操作系统。根据上图可以看出操作系统与底层硬件之间还有着各种驱动,操作系统对驱动做管理,驱动再对底层硬件做管理(不包括特殊情况)。

        首先我们要谈的第一个问题就是管理,操作系统是如何管理下层的软硬件呢?

        我们类比校园中的校长和学生的关系,来解释操作系统和底层硬件的关系。

        校长在管理偌大的学校的时候,并不会和每一个学生见面,也并不会深入的了解到每一个学生,那么,学生中的,张三,李四 ... .... 挂科太多被校长开除了,这是为什么呢?因为校长拿到了他们各科成绩的数据!在这种情况下,校长就属于管理者,张三,李四 ... ....属于被管理者。

        此时我们能得出第一条信息,就是管理者和被管理者并不需要见面。管理者的核心工作是做决策,做决策是根据数据来做。

        那么校长又是如何拿到数据的,通过辅导员拿到数据。在开学的第一天你就要填写各种上交你的信息。

        面对这些庞大的数据,校长通过辅导员收集上来的来获取每个学生的信息,表格中的每一项属性都是学生说具有的,只是每个学生的数值是不一样的。

        学校中的学生成千上万,校长的工作也从管理学生,变成管理学生的信息

        此时校长恰好是程序员出身,用学生的属性定义为一个结构体,然后每个结构体里面都有一个指针,指向下一个结构体。校长需要c语言成绩最好的,谁跑步最快的,谁挂科最多,都可以在这张链表中查,当有田径会校长通过查链表就知道派谁去,当考试完成后校长通过查链表就知道,该让谁滚蛋(滚蛋后校长就把该同学的节点删除),这样通过管理数据管理链表,就能实现对学生的管理。校长的工作也就变成对链表的增删查改!

        从上面的分析,我们可以得出。管理者是根据数据做决策,管理者拿到数据通过次级管理者,管理者对人的管理转化成对数据管理。

        我们不妨可以将操作系统看作校长,驱动程序看做辅导员,底层硬件看作学生。操作系统对底层硬件的管理就变成对底层硬件的数据做管理,数据通过驱动程序得到。我们将所有硬件所具有的所有属性定义成为一个结构体,然后每个硬件所具有的独特的属性在他的节点内进行描述!!最后通过指针链接形成链表(简单理解为链表),最后将链表给到操作系统!

        以上操作系统的管理行为成为:先描述,在组织!

    1.2为什么要有操作系统 

        设计OS的目的:

        与硬件交互,管理所有的软硬件资源(对下),
        为用户程序(应用程序)提供一个良好的执行环境(对上)

        良好是指的稳定、安全、高效的。

        当我们再来看这张图的时候就会发现,从最顶端的用户开始,的箭头依次向下。那么能直接访问操作系统,或者程序驱动,或者底层硬件吗?

        不能!!!每个用户都是一个独立的个体!如果任由他们任意的访问操作系统内部!那么其他的用户数据的安全性如何保障!!! 并不是所有的用户和开发者都能够正确的访问驱动和底层硬件的(这些硬件也只有生产该硬件的厂商知道怎么用最好的方式去访问),所以用户和开发者访问就有了一定的成本。操作系统的出现统一了驱动的管理形式。降低了开发者的使用成本使开发变得更加高效同时也能使计算机变得更加稳定。

        对于用户来说操作系统也为其准备了系统调用接口,在系统调用之上,也有库函数、shell外壳之类的。更加便捷了用户的访问。

 2 进程

        概念:

        我们先给出概念:进程 = 内核数据结构 + 可执行程序。

                      或者说    进程 = 内核PCB对象 + 可执行程序。

        进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性(结构体)的集合。
        课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct。

        task_struct-PCB的一种

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

        存在着这样的一个事实,我们可以同时打开qq,微信,王者荣耀。这些程序都在运行着,根据冯诺依曼体系结构,程序需要先被加载到内存上,然后才能被cpu所运行。那么操作系统需不需要管理可执行程序呢?可能是需要的!!操作系统是怎么管理呢?根据我们以上所得出来的结论,是先描述,再组织的!!

        那么为什么可执行程序加载到内存后,变成进程,我们要给每一个进程形成一个PCB对象呢?

因为操作系统需要管理。

        从上面的结构体可以简单的看出PCB是怎么对进程描述以及组织的。

        如果把头节点给到cpu,那么进程就可以跑就起来了。

        

        这个标识符就是pid 那么我们怎么在Linux下看到pid呢。

通过下面两个指令:

 写一段死循环:

        写出来的死循环效果如下: 

       每个进程的创建都有对应的pid ,那么我们该如何看到pid呢?

        指令:

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

        这一串指令就可以查看到当前运行程序的PID了: 

那么如何证明这个pid 就是当前进程的pid呢?

修改代码:

#include<stdio.h>2 #include<unistd.h>3 #include<sys/types.h>4 int main()5 {6 7   pid_t id = getpid();8   pid_t fid = getppid();9 10 11   while(1)12   {13     sleep(1);14     printf("i am a process,ppid:%d,pid:%d\n",fid,id);              15   }16   return 0 ;17 }

由此我们可以发现:这就是进程中的标示符:也就是我们要找的pid 

相关文章:

Linux 进程(一)

1 操作系统 概念&#xff1a;任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09; 其他程序&#xff08;例…...

vue中的keep-alive详解与应用场景

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-keep-alive 目录 一、Keep-alive 是什么 二、使用场景 三、原理分析 四、案例实现 activa…...

软件设计师——程序设计语言基础(一)

&#x1f4d1;前言 本文主要是【程序设计语言基础】——程序设计语言基础的相关题目&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#…...

Apache简介与安装

先导概念: 静态网站: 最早的建站方式,每个页面都是一个独立的文件,需要手动上传或编辑。网页内容固定不变。例如,个人博客、静态企业官网等。 动态网站: 网站内容可根据不同情况动态变更,一般通过数据库进行架构。包含服务器端脚本,可以实现更丰富的功能。例如,社…...

set与map

set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map…...

基于单片机智能液位水位监测控制系统

**单片机设计介绍&#xff0c; 基于单片机智能液位水位监测控制系统 文章目录 一 概要特点应用场景工作原理实现方式 系统功能实时监测控制调节报警功能数据记录与分析 总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 ## 系统介绍 基于单片机…...

C#,《小白学程序》第十七课:随机数(Random)第四,移动平均值(Moving Average)的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十七课&#xff1a;随机数&#xff08;Random&#xff09;第四&#xff0c;移动平均值的计算方法与代码 /// 继续学习数据统计&#xff0c;移动平均值的计算方法 /// 移动平均值就是一定步长内数值的平均值&#xff0c;用…...

行情分析——加密货币市场大盘走势(11.29)

大饼已经形成了底背离&#xff0c;即MACD往下走&#xff0c;而价格还在往上走&#xff0c;这种后续往往会大跌。继续把空单拿好&#xff0c;已经持仓的无需加仓。多次上涨却一直不能突破&#xff0c;说明多空和空军力量都很强&#xff0c;等待后续出方向。在笔者看来&#xff0…...

C++——string的字符串比较,字符存取,插入和删除和子串

一. string字符串比较 功能描述:字符串之间的比较 比较方式:字符串比较是按字符的ASCII码进行对比 返回 0 > 返回 1 < 返回 -1 函数原型: *int compare(const string &s) const; //与字符串s比较 *int compare(const char *s) const; //…...

字节10年经验之谈 —— 从0到1开发自动化测试框架!

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…...

Mysql(基本介绍+下载安装+服务器+基本使用+建库建表+navicat/mybitas工具+外键及实例)

一、Mysql基本介绍 当谈论MySQL时&#xff0c;通常指的是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;。MySQL是由瑞典的开发者在1995年创建的&#xff0c;后来被Sun Microsystems收购&#xff0c;最终成为Oracle Corporation的一部分。以下是关于MySQL的…...

Python+requests+Jenkins接口自动化测试实例

在做功能测试的基础上&#xff0c;我平时也会用postman测试接口&#xff0c;不过postman只能测试一个一个接口&#xff0c;不能连贯起来&#xff0c;特别是我们公司的接口很多都是要用到token的&#xff0c;导致我每次测个需要登录的接口都要去获取到token&#xff0c;做了很多…...

SpringBoot3核心原理

SpringBoot3核心原理 事件和监听器 生命周期监听 场景&#xff1a;监听应用的生命周期 可以通过下面步骤自定义SpringApplicationRunListener来监听事件。 ①、编写SpringApplicationRunListener实现类 ②、在META-INF/spring.factories中配置org.springframework.boot.Sprin…...

JS常用数据类型转换(数字型和字符串型之间转换)

提供了5中基本数据类型&#xff1a;数字 number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 常用的是数字型和字符串型之间的转换&#xff0c;常用的转换方法如下&#xff1a; 1 数字型转换成字符串型 a) 使用String&#xff08;&#xff09;方法…...

算法通关村第一关—青铜挑战—用Java基本实现各种链表操作

文章目录 第一关—链表【青铜挑战】1.1 单链表的概念1.2 链表的相关概念1.3 创建链表 - Java实现1.4 链表的增删改查1.4.1 遍历单链表 - 求单链表长度1.4.2 链表插入 - 三种位置插入&#xff08;1&#xff09;在链表的表头插入&#xff08;2&#xff09;在链表的中间插入&#…...

SparkRDD及算子-python版

RDD相关知识 RDD介绍 RDD 是Spark的核心抽象&#xff0c;即 弹性分布式数据集&#xff08;residenta distributed dataset&#xff09;。代表一个不可变&#xff0c;可分区&#xff0c;里面元素可并行计算的集合。其具有数据流模型的特点&#xff1a;自动容错&#xff0c;位置…...

嵌入式设备与PC上位机通信协议设计的几点原则

嵌入式设备在运行中需要设置参数&#xff0c;这个工作经常由PC机来实现&#xff0c;需要为双方通信设计协议&#xff0c;有代表性协议是如下三种&#xff1a; 从上表可以看到&#xff0c;一般嵌入式设备内存和运算性能都有限&#xff0c;因此固定二进制是首选通信协议。 一&am…...

Go 内置运算符

一、算数运算符 1、算数运算符使用 package mainimport ("fmt" )func main(){fmt.PrintIn("103",103) //10313fmt.PrintIn("10-3",10-3) //10-37fmt.PrintIn("10*3",10*3) //10*330//除法注意&#xff1a;如果运算的数都是…...

Table和HashBasedTable的使用案例

------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…...

【执行批处理后 executeBatch() 没反应,一个参数相信就能搞定】

一、场景是在使用EasyExcel读取全表时&#xff0c;每次手动提交事务6w多条&#xff0c;总计190w数据量的情况下发生的。 博主比较fw&#xff0c;卡住了两天&#x1f636; 此问题还有一个比较bug的地方&#xff0c;就是当你在 executeBatch() 上下打断点时还能够执行出来&…...

从‘亮暗模式’到‘向量夹角’:用大白话和几何直觉彻底搞懂归一化互相关(NCC)

从乐高积木到向量空间&#xff1a;用生活化类比拆解归一化互相关&#xff08;NCC&#xff09;的核心逻辑 想象你正在玩一款特殊的乐高积木游戏&#xff1a;每块积木的凸起和凹陷构成独特纹路&#xff0c;而你的任务是在一堆杂乱积木中找出与手中样本完全契合的那一块。这个看似…...

别再混淆了!用Android AudioRecord.getMinBufferSize()源码,彻底搞懂音频帧、周期和缓冲区

从源码透视Android音频开发&#xff1a;帧、周期与缓冲区的实战解析 在移动音频开发领域&#xff0c;Android平台的AudioRecord API是构建录音功能的核心工具。许多开发者虽然能够调用getMinBufferSize()方法获取缓冲区大小&#xff0c;但当遇到音频卡顿、杂音或延迟问题时&…...

NCM音乐格式转换完全指南:从加密困境到自由播放的解决方案

NCM音乐格式转换完全指南&#xff1a;从加密困境到自由播放的解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 一、问题解析&#xff1a;NCM格式的技术困境与用户痛点 当你下载了喜爱的音乐却发现只能在特定应用中播放&…...

云原生应用的可观测性最佳实践

云原生应用的可观测性最佳实践 &#x1f525; 硬核开场 各位技术老铁&#xff0c;今天咱们聊聊云原生应用的可观测性最佳实践。别跟我扯那些理论&#xff0c;直接上干货&#xff01;在云原生时代&#xff0c;可观测性是系统可靠性的关键&#xff0c;它能帮助我们全面了解系统…...

C++笔记 Lambda表达式

Lambda表达式是C11引入的核心特性之一&#xff0c;本质是一种匿名函数&#xff0c;可以捕获作用域内的变量&#xff0c;无需单独定义函数名&#xff0c;就能实现简洁、灵活的代码编写&#xff0c;尤其适合作为回调函数、算法参数&#xff08;如STL算法&#xff09;等场景&#…...

Oh-My-Posh 多会话管理终极指南:在不同终端中保持一致的完美体验

Oh-My-Posh 多会话管理终极指南&#xff1a;在不同终端中保持一致的完美体验 【免费下载链接】oh-my-posh2 A prompt theming engine for Powershell 项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-posh2 Oh-My-Posh 是一款强大的 PowerShell 提示符主题引擎&…...

ChatGPT出现前的文本生成:手把手用Python实现n-gram古诗续写工具

从零构建唐诗生成器&#xff1a;用Python揭秘n-gram的文本魔法 记得第一次看到计算机生成古诗时&#xff0c;那种震撼至今难忘——机器竟能模仿李白杜甫的笔触。这背后最基础的技术&#xff0c;就是今天我们要探讨的n-gram模型。不同于现代庞大的神经网络&#xff0c;n-gram用…...

HoRNDIS:Mac与Android USB网络共享终极指南

HoRNDIS&#xff1a;Mac与Android USB网络共享终极指南 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 想在Mac上使用Android手机的USB网络共享功能吗&#xff1f;HoRNDIS这款免费开源驱动就…...

用Logisim从零搭建一个24小时数字时钟:从计数器到完整计时器的完整流程

用Logisim从零搭建24小时数字时钟&#xff1a;模块化设计实战指南 第一次打开Logisim时&#xff0c;面对空白的画布和复杂的元件库&#xff0c;很多数字电路初学者都会感到无从下手。本文将带你从最基础的4位二进制计数器开始&#xff0c;通过模块化设计思想&#xff0c;逐步构…...

前端 SEO 优化与图片 SEO 优化的关系是什么_如何利用前端框架进行 SEO 优化

前端 SEO 优化与图片 SEO 优化的关系是什么&#xff1f; 在当今的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了任何网站想要获得高流量的关键步骤。前端 SEO 优化与图片 SEO 优化在这其中扮演着至关重要的角色。尽管它们看起来独立存在&#xff…...