千锋教育嵌入式物联网教程之系统编程篇学习-02

news2024/12/26 11:40:05

目录

系统调用函数与库函数 

库函数的组成

库函数与系统调用的关系 

进程概述

进程的定义

进程与程序的区别

进程的状态及其转换

进程的调度机制

 进程控制块

查看当前系统所有进程

进程号函数 

进程创建fork函数 

进程挂起

进程的等待

wait()

 waitpid

特殊进程 


系统调用函数与库函数 

库函数的组成

库函数与系统调用的关系 

 

这里指的是访问文件的库函数,比如C语言我们学的fopen 

 

 这里表示的意思是:我printf可以一直写,写到满了或者刷新缓冲区了,我再调用write函数,就相当于送快递,我需要等快递积累到了一定的数量时,我才开始派件,而不是来一个我送一个,不然很浪费时间

 总结:大部分的库函数仍然是系统调用,只不过库函数去系统调用的路上多了缓冲区而已,从而减少系统调用的次数

进程概述

进程的定义

进程与程序的区别

 进程是程序的一次执行过程

进程的状态及其转换

想想-FreeRTOS的知识,因为FreeRTOS也是一个操作系统,而linux也是操作系统,有点知识是像的

进程的调度机制

时间片轮转也是FreeRTOS的调度机制

上下文切换就是保存上文执行下文

 进程控制块

进程控制块-保存一个进程的相关内容的结构体

 ​​​

 

 这里举了进程控制块具备的信息--很多信息,比FreeRTOS具备的更多,因为linux内核更复杂,但是学了FreeRTOS能更好理解,学一个小型的操作系统,有利于理解大型的操作系统(Linux)

 

进程号是内核随机分配的,用户无法控制。并且0和1被使用,1是祖先进程,0是交换进程

查看当前系统所有进程

这里的所有进程是指真正运行的进程,如果一个程序运行了一次的话,那么是不会存在的,因为该进程已经被销毁了,因此如果你想查询自己创建的进程的话,那么需要使你的程序是一个死循环

如果单纯输入ps,那么就是显示当前进程的信息,其实当前进程就是ps

 

 我们打开qq,分别与1,2,3号联系人聊天,并且打开聊天窗口,那么3个窗口表示3个进程,而qq就相当于父进程

进程号函数 

进程创建fork函数 

 根据返回值来区分父子进程

父子进程相互独立,有各自的存储空间--独立的地址

类似于租房子,每个房子的样子是一样的,但是地址不一样(房间号不一样),初始的设备和装修也是一样,通过房间号(相当于返回值)进行区分,并且父子进程的执行顺序不确定,因为你不知道哪一个房间先装修,这个取决于装修工人(相当于内核)

 一旦fork了,那么子进程就会有父进程后面的代码了

fork();
printf("hello\n");  --结果是打印2个hello

这里是没有区分父子进程,这里的例子只是为了理解,子进程保存了父进程拥有的东西

fork();
printf("hello\n");
fork();
printf("hello\n");---打印6个hello

但是父子进程也是有联系的,比如磁盘空间,就相当于电梯,都是一个电梯,大家公用

场景分析:文件中有20个字节数,父进程read-15个字节,然后子进程read,那么子进程只能read后面的5个字节,而不能从头开始,因为文件的偏移指针已经改变了,所以文件是公用的,因为它不在用户区,而是在内核区

进程挂起

其实就是相当于FreeRTOS中的delay而已

到了指定时间后,进程成为就绪态(有了抢占cpu的资格),等待内核调度成为运行态

进程的等待

wait()

类似于FreeRTOS的信号量等,等待某一个事情发生才能执行下面的代码,否则就一直阻塞等待。而这里的就是父进程等待子进程运行完,后面的代码才能被执行

 

 等待该父进程创建的所有子进程(具有一定的缺陷也许)终止、回收资源、除非子进程终止或者来了一个信号否则一直阻塞等待、取返回值

 

不想要返回值的话就NULL 

 

指定子进程退出 waitpid

 

 

 前面的wait会死等,而waitpid提供了两种功能,死等和不死等,所以说waitpid完全可以替换wait,因为wait有的功能waitpid全都有

 ​​​​​​

特殊进程 

 

 

 

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

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

相关文章

CPU 运行时的硬件环境详解

注:本文参考小林coding相关文章,侵权请联系 目录 1.图灵机的工作方式 2.冯诺依曼模型 3.内存 4.中央处理器 5总线 6.输入、输出设备 7.线路位宽与 CPU 位宽 代码写了那么多,你知道 a 1 2 这条代码是怎么被 CPU 执行的吗? …

TCP/IP协议族之TCP、UDP协议详解(小白也能看懂)

前言 在进行网络编程之前,我们必须要对网络通信的基础知识有个大概的框架,TCP/IP协议族涉及到多种网络协议,一般说TCP/IP协议,它不是指某一个具体的网络协议,而是一个协议族。本篇章主要针对IP协议、TCP和UDP协议记录总…

常用的代码命名方法

常见的三种命名方法1 驼峰命名法(CamelCase)驼峰命名法应该我们最常见的一个,这种命名方式使用大小写混合的格式来区别各个单词,并且单词之间不使用空格隔开或者连接字符连接的命名方式1 大驼峰命名法(UpperCamelCase&…

Mysql 基础-持续更新

去重 DISTINCT DISTINCT 关键字的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据给用户 注意点: DISTINCT 关键字只能在 SELECT 语句中使用。在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前…

IPv6路由协议实验配置(ospfv3、isis-ipv6、bgp4+)

目录 OSPFv3实验配置 建立OSPFv3邻居 AR1修改DR优先级 AR1引入直连路由 配置Stub区域 ISIS IPv6实验配置 建立ISIS邻居 修改AR1的DIS优先级 在AR1上配置路由泄露 BGP4实验配置 AR1与AR2、AR3建立IBGP邻居关系 AR2与AR4建立EBGP邻居关系 配置AR1为反射器 OSPFv3实验…

Android时间与服务器同步方案

转自: https://blog.csdn.net/qinci/article/details/70666631这个的吧?转发请注明来源吧?Android时间与服务器同步方法_飛舞的青春的博客-CSDN博客Android时间与服务器同步方案 在部分软件应用场景里,我们对应用时间要求非常苛刻…

mysql navicat函数_Navicat for MySQL函数高级属性

过程和函数是一组可以保存在服务器上的SQL语句。MySQL(www.formysql.com)函数高级属性主要涉及安全性,定义者,数据访问,决定性等方面的内容Navicat 函数高级属性安全性:指定用创建函数的用户权限来运行函数,或是用启用…

【C++】vector (vector的介绍及使用)

文章目录vector的介绍及使用前面我们学习了string,我们在学vector可以结合之前的理解,所以我们vector就不详细介绍了。 vector的介绍及使用 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就…

一个没有混进大厂的普通程序员,10年真实收入变化

有人说,程序员的高收入和工作年限成正比,认为自己的薪资应该如此计算: private static boolean 计算工资() { //years工作时长(年)int years 5;while(years-- > 0){做项目();团建活动();涨工资();拿年终奖();}return 跳槽() &&…

2021年亚太杯APMCM数学建模大赛A题图像边缘分析与应用求解全过程文档及程序

2021年亚太杯APMCM数学建模大赛 A题 图像边缘分析与应用 原题再现: 随着科学技术的发展,对各种工件和零部件测量精度的要求越来越高,对测量仪器的要求也越来越高。数字图像尺寸测量仪器等各种图像测量设备目前正逐渐取代传统的手动卡尺测量…

Vue 常用内置指令

Vue 常用内置指令描述指令内容渲染指令{{}} 与 v-text覆盖面积v-text{{}}闪现问题{{}}v-textv-html属性绑定指令v-bind简写 :事件绑定指令v-on参数事件对象$event事件修饰符按键修饰符双向绑定指令v-model修饰符条件渲染指令v-show 与 v-if 的区别实现原理性能消耗举个栗子v-el…

C#构建Web服务项目实战(二)

概述本文演示了如何通过Ajax访问C# ASP.NET项目中的WebService方法(.asmx文件形式)。本文的项目配置参见前文:C#构建Web服务项目实战(一)。环境Visual Studio 2017 / VS2019C# ASP.NET Web服务Win11 / Win10类似.NET F…

由浅入深地学习指针(学习指针必看)

目录 指针初阶 指针定义 指针和指针类型 c语言的整型指针解引用与整型变量的区别 内存 指针和指针类型 指针类型的意义 野指针 规避野指针 指针运算 指针和数组 二级指针 指针数组 指针进阶 指针的概念再提起 字符指针 《剑指offer》 字符串常量: …

【基于机械臂触觉伺服的物体操控研究】UR5e运动学建模及代码实现

我的毕设题目定为《基于机械臂触觉伺服的物体操控研究》,这个系列主要用于记录做毕设的过程。 前言:UR系列是优傲公司的代表产品,也是目前比较通用的产品级机械臂。所以我打算用该机械臂进行毕设的仿真实现。关于其运动学建模,网…

【每日一题】【LeetCode】【第十二天】区域和检索 - 数组不可变

解决之路 题目描述 测试案例(部分) 第一次 emmm,说实话,一开始我还真没看懂题目是什么意思。。。。 自己按我自己理解的方式写了一下代码,用测试案例跑了下,成功了。 不过,放进去跑不通&…

VScode远程调试深度学习debug

VS Code CtrlP,在搜索框>select interpreter检查一下python环境 #查看GPU 环境;版本号 nvidia-smi.exe使用VSCode进行深度学习首先进行debug 首先要安装Remote Development个人理解可以远程打开编辑文件。 点击左下角的箭头,在对话框中…

async-excel整合站内信通知用户体验感满满

前面的文章我们讲过消息中心站内信的实现 【消息中心】 那么本章我们来说说异步导入导出完成后,如何使用消息中心站内信的功能进行通知用户业务处理完成了 在async-excel中异步逻辑处理完成后会调用一个callback方法进行回调,所以我们可以再对async-exc…

完全二叉树与堆(包含STL堆的用法)

完全二叉树 完全二叉树为一类特殊的二叉树,高度为h的完全二叉树满足如下条件: (1)所有叶结点都出现在第h或h-1层; (2)第h-1层的所有叶结点都在非叶结点的右边; (3&#…

AAAI 2023|模拟人脑场景感知过程,套娃Transformer讲故事能力更上一层楼

原文链接:https://www.techbeat.net/article-info?id4467 作者:seven_ 视频字幕生成目前已成为工业界AI创作领域非常火热的研究话题,这一技术可以应用在短视频的内容解析和讲解中,AI讲故事的技术已经越来越成熟。而在学术界&…

13、ThingsBoard-如何发送告警邮件

1、概述 很多时候,我们使用thingsboard的时候,会遇到比如一个设备触发了告警,如何将设备的告警消息定义成邮件模板,然后通知租户或者客户管理员,管理员进行处理,这样的需求是非常重要的。 2、实现的步骤 要实现这个需求我总结了几步: 2.1、设备上报的参数与阈值进行…