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

重定位,进程的创建,线程相关

重定位

进程的重定位指将程序加载到内存中不同的位置执行,在进程换出换入过程中将会发生。通过更新程序中使用的相对地址。

进程的创建——fork()

进程树,在自己的节点下创建进程节点。
使用fork,创建的子进程是父进程副本吗,继承当前数据,代码段,pc,文件描述符等,但是堆栈是各自的,两个进程之后独立执行。fork子进程中返回的是0,父进程返回进程的PID。
申请PCB——初始化PCB——分配资源(从父进程继承或者共享)——加入就绪队列——返回PCB
在这里插入图片描述
执行方法有两种:

  1. 父进程等待子进程执行完毕。
  2. 两者同时执行。

父进程终止,子进程在节点树上没有父节点,也会终止。
子进程exit(),操作系统回收空间,并且返回父进程信号。

进程间通信

  1. 共享内存,生产者——消费者模型
  2. 网络

线程和进程调度

在Linux中,操作系统支持进程和线程的调度。在Linux中,线程被视为与进程相同的调度实体,因为Linux将线程实现为轻量级进程(LWP,Lightweight Process)。linux下操作系统调度的是进程和lwp(由进程内部的线程映射过来的)。

线程共享进程的内存空间,可以互相通信

线程的创建

在Linux中,操作系统支持进程和线程的调度。在Linux中,线程被视为与进程相同的调度实体,因为Linux将线程实现为轻量级进程(LWP,Lightweight Process)。## 指令周期包含多个CPU周期
一个指令周期包括:取指令——分析指令——取地址——运算——放回

多线程下的临界区问题

共享资源变量,抢占的对称多处理器。

基于硬件的原子操作可以实现锁。TestAndSet(),TestAndSet(),通过硬件指令实现。

通过TAS或SWAP实现的自旋锁

while(TAS(&lock));

信号量解决忙等待

二进制信号量:互斥锁
常量信号量:资源数

typedef struct{int value;PCB* queue;
}semaphore;
wait(semaphore* s){s->value--;if(s->value<0{将这个线程添加到queue;block();让权等待}
}
signal(semaphore* s){s->vlaue++;if(vlaue<=0){队首出队;wakeup(p);唤醒队首}
}
block()将线程阻塞和wackup()唤醒线程,是通过操作系统来实现的。

Peterson算法

举手礼让策略

bool flag[2]={false};
int turn=0;P0{while(true){flag[0]=true;//举手turn=1;//礼让while(flag[1]&&turn==1);//礼让flag[0]=flase;}
}
http://www.lryc.cn/news/278440.html

相关文章:

  • Java填充Execl模板并返回前端下载
  • ChatGPT本地部署,学习记录
  • Find My游戏手柄|苹果Find My技术与手柄结合,智能防丢,全球定位
  • 2024美赛数学建模思路 - 复盘:光照强度计算的优化模型
  • 【Deep Dive: AI Webinar】开放 ChatGPT - 人工智能开放性运作的案例研究
  • Devops相关问题及答案(2024)
  • 掌握Python设计模式,SQL Alchemy打破ORM与模型类的束缚
  • 性能分析与调优: Linux 磁盘I/O 观测工具
  • Could not erase files or folders:
  • 算法训练营第四十四天|动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ
  • 探索计算机网络:应用层的魅力
  • MySQL 按日期流水号 条码 分布式流水号
  • 前端导出Excel文件,部分数字前面0消失处理办法
  • 零基础学Python网络爬虫案例实战 全流程详解 高级进阶篇
  • 第十二届“中关村青联杯”全国研究生数学建模竞赛-A题:水面舰艇编队防空和信息化战争评估模型(续)(附MATLAB代码实现)
  • bmp图像文件格式超详解
  • Unity Meta Quest 一体机开发(十三):【手势追踪】自定义交互事件 EventWrapper
  • 13、Redis高频面试题
  • Koa学习笔记
  • HiDataPlus 3.3.2-005 搭建(个人的一点心得体会 x86 平台)
  • 【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据
  • HNU-数据库系统-作业
  • Python基础知识:整理10 异常相关知识
  • golang并发安全-select
  • 微软Visual Studio产品之Visual C++编程进阶——一维数组(画画版)
  • Moonbeam生态项目分析 — — 下一代DeFi协议HydraDX
  • Spark九:Spark调优之Shuffle调优
  • linux c多线程优先级
  • Redis在项目开发中的应用
  • mapper向mapper.xml传参中文时的乱码问题