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

2023-11-05 03:59

本文主要是介绍千锋教育嵌入式物联网教程之系统编程篇学习-02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

系统调用函数与库函数 

库函数的组成

库函数与系统调用的关系 

进程概述

进程的定义

进程与程序的区别

进程的状态及其转换

进程的调度机制

 进程控制块

查看当前系统所有进程

进程号函数 

进程创建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全都有

 ​​​​​​

特殊进程 

 

 

 

这篇关于千锋教育嵌入式物联网教程之系统编程篇学习-02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347281

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同