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

嵌入式自学第二十七天

(1)进程:正在运行的程序,会去分配内存空间,并受到cpu的调度。
pcb进程控制块,位于kernal(内核),是一个结构体,包含进程标识符、进程状态、内存分配、返回地址等信息。
pid进程标识符,
chdir改变当前工作路径。
umask设置权限掩码
ulimit -a显示进程资源上限
fds  进程打开的文件列表,文件io会提到,文件描述符。
signal进程间通信;大概能发64个信号,接收到信号先执行信号函数。处理异步io,ctrl c就相当于进程通信,强制结束循环。
用户id,记录谁把程序运行的,组id
linux中pcb块名字:task_struct
(2)进程与程序关系
程序:静态
存储在硬盘的代码,数据的集合
进程:动态
程序执行的过程:创建、调度、消亡
.c     a.out        process

程序是永存,进程是暂时的。
进程有程序状态的变化
进程可以并发
进程间存在计算机资源的竞争
一个程序可以运行多次,变成多个进程,比如开启多个终端,一个进程可以运行一个或多个程序比如打开钉钉,聊天直播都被打开
ELF可执行程序的格式,exe PE格式

内存分布:
运行程序后,内存装code代码段只读、data数据段:静态变量全局变量,bss未初始始变量、heap
堆区(动态内存空间)malloc、映射区(共享区)map(share):内容放在kernal内核(如libc.c)。栈stack
上面是虚拟内存MMU物理地址转虚拟地址
透明、隔离、权限。
4g内核最大3g给a.out

(3)进程作用:程序并发执行

(4)进程状态:
3个状态,就绪→执行态→阻塞(等待,睡眠)基本操作系统
linux中的状态,运行态,睡眠态,僵尸,暂停态。、

(5)进程调度:
调度算法:sched  非实时系统(SHCHED_OTHER,batch,idle),实时系统(SCHED_FIFO,rr)

宏观并行,微观串行。

top查看进程,
ps查看pid,pstree进程树
ps aux查看进程
lsof -p pid  查看进程打开的文件。

kill 发信号关一个  kill -2 PID 普通关闭
kill -9 PID 强制关闭
killall -9  名称全关
终端bash
kill -l查看-
不加-默认15

(6)进程相关函数:
fork();叉子,启动进程。
返回值大于零是父,等于零是子。
一次调用,返回两次。
子进程号大一些
变量不共享。隔离保护
子进程复制父进程的内存空间和内核pcb,但pid号不同

并发逻辑,两个代码都在运行。

getpid获得进程pid号
getppid获得父进程pid号

/less屏满停,空格下一页
man -k模糊搜索
pstree进程树
ps aux/grep 51283父进程获取

子进程会获得父进程数据段、堆、栈、代码段
要想确定父子间运行顺序,需要IPC机制

父的返回值是子的id号,没有函数获得子的id号

写时复制:大部分情况是共享的,只有变量值改变时子进程才开空间。

进程终止:
主动退出:main函数return;
    c函数exit()程序结束,资源释放。
    系统调用_exit_Exit,进程结束,不清理函数
    主线程退出
    主线程调用:pthread_exit:线程结束

异常退出:发生严重错误,操作系统调用,abort()
signal   kill pid
最后一个现场被pthread_cancle取消


 

http://www.xdnf.cn/news/640855.html

相关文章:

  • ST表——算法的优化
  • TCP 和 UDP 的区别
  • 电梯调度算法详解与Python实现
  • 页表:从虚拟内存到物理内存的转换
  • C语言初阶--操作符
  • 消息队列kafka的基础概念和部署
  • C#、C++、Java、Python 选择哪个好
  • TCP 的三次握手
  • Python Day32 学习
  • 十二、【鸿蒙 NEXT】如何使用系统api实现视频压缩
  • 电子电路:电学都有哪些核心概念?
  • Oracle控制文件损坏恢复方案
  • dify_plugin数据库中的表总结
  • threejs几何体BufferGeometry顶点
  • 【报错】Error attempting to get column ‘created_time‘ from result set.解决方法
  • 手撕string类
  • 汉诺塔超级计算机堆栈区与数据区的协同
  • Docker(零):本文为 “Docker系列” 有关博文的简介和目录
  • Docker核心笔记
  • JavaWeb:SpringBoot配置优先级详解
  • 互联网大厂Java求职面试:AI应用集成中的RAG系统优化与向量数据库性能调优实战
  • 英语科研词汇的困境与汉语的崛起之光
  • 漫谈英伟达GPU架构进化史:从Celsius到Blackwell
  • vue3中使用watch
  • 什么是智能体agent?
  • Anaconda 常用命令汇总
  • Mongo DB | 多种修改数据库名称的方式
  • 明阳智慧能源社招校招入职测评 |iLogic言语逻辑数字、Talent5大五职业性格测评、TAS倍智人才测评考什么
  • 资源-又在网上淘到金了-三维模型下载
  • CodeTop之LRU缓存