资讯专栏INFORMATION COLUMN

操作系统实战

developerworks / 2418人阅读

摘要:操作系统实战临界资源保护临界资源进行通信线程间同步互斥量和读写锁自旋锁条件变量进程间同步共享内存域套接字重要概念用户态与内核态上下文切换协程线程同步之互斥量互斥量锁可以保证多线程的指令按顺序执行,避免两个线程的指令交叉执行即原子性原子性是指

操作系统实战 临界资源
保护临界资源/进行通信

线程间同步

互斥量和 读写锁 自旋锁 条件变量

进程间同步

共享内存 域套接字

重要概念

用户态与内核态

上下文切换

协程

线程同步之互斥量

互斥量()可以保证多线程的指令按顺序执行,避免两个线程的指令交叉执行(即 原子性

原子性是指一系列操作指令不可被中断执行,要么全部执行,要么全部没有执行,不存在部分执行的情况

互斥量是最简单的线程同步的方法

互斥量(互斥锁)是处于两态之一的变量: 解锁加锁

两个状态可以保证资源访问的串行

操作系统直接提供了互斥量的API,可使用API完成资源的加锁,解锁的操作

pthread_mutex_t
线程同步之自旋锁

自旋转也是一种多线程同步的变量

使用自旋转的线程会反复检查锁的变量是否可用

自旋转不会让出CPU,是一种忙等待 的状态 (死循环等待锁被释放)

自旋锁避免了进程或线程的**上下文切换**的开销

操作系统内部很多地方使用的是自旋锁
自旋锁不适合在单核CPU使用

pthread_spinlock_t
线程同步之读写锁
当临界资源属于 多读少写 的情况,可以采用效率更高的同步方法:读写锁 读多写少场景相比互斥量性能提出几倍

读写锁是一种特殊的 自旋锁

允许多个读者同时访问资源以提高读性能(读 不改变临界资源的值)

对于写操作则是 互斥 的

pthread_rwlock_t
pthread_relock_rdlock
pthread_rwlock_wrlock
线程同步之条件变量

在生产消费场景中面临以下情况
1 缓冲区小于0时,不允许消费者消费,消费者必须等待
2 缓冲区满时,不允许生产者往缓冲区生产,生产者必须等待
当生产者生产一个产品时,唤醒可能等待的消费者
当消费者消费一个产品时,唤醒可能等待的生产者

pthread_cond_t  配合 互斥量(锁)使用
pthread_cond_wait
pthread_cond_signal

条件变量是一种相对复杂的线程同步方法

条件变量允许线程睡眠,直到满足某种条件

当满足条件时,可以向该线程信号,通知唤醒

线程同步方法总结

1 互斥锁 最简单的线程同步方法,会阻塞线程
2 自旋锁 避免上下文切换的一种线程同步方法,属性忙等待CPU
3 读写锁 为多读少写的资源设计的线程同步方法,显著提高性能
4 条件变量 相对复杂的多线程同步方法,配合互斥量,更灵活的使用场景

使用fork系统调用创建进程
java python 等语言底层也是通过fork 创建进程

fork系统调用是用于创建进程的

fork创建的进程初始状态与父进程一样

系统会为fork的进程分配新的资源

fork系统调用无参数 fork会返回两次 ,分别是子进程id0

进程同步之共享内存

进程的线程共享进程资源,理论上进程之间由于操作系统的进程管理机制(进程-页表-物理内存),进程间的内存空间是相互独立的,(进程默认是不能访问进程空间之外的内存空间)但进程可以通过共享内存打破这样的限制

共享存储允许不相关的进程访问同一片物理内存

共享存储是两个进程之间共享和传递数据最快的一种方式

共享内存未提供同步机制,需要借助其他机制管理访问

共内存是高性能后台开发中最常用的进程同步方式
共享内存实现流程

1 申请共享内存
2 连接到进程空间
3 使用共享内存
4 脱离进程空间&删除

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76278.html

相关文章

  • Linux云计算高端架构师+DevOps高级虚拟化高级进阶视频

    摘要:课程大纲开班典礼开班典礼开班典礼操作系统系统安装及启动流程操作系统系统安装及启动流程必备命令讲解必备命令讲解必备命令讲解及系统启动流程必备命令讲解及系统启动流程启动流程和用户及用户组讲解启动流程和用户及用户组讲解用户权限讲解及编辑器用户权限 课程大纲1.开班典礼(1)_rec.mp42.开班典礼(2)_rec.mp43.开班典礼(3)_rec.flv4.Linux操作系统系统安装及启动...

    Cheng_Gang 评论0 收藏0
  • 重磅发布- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)

    摘要:技术列表缓存中间件服务协调调度中间件消息中间件综合性质的中间件分布式锁分布式唯一生成服务雪花算法邮件服务权限认证授权矿建的登录认证服务以及等等。 概要介绍:历经一个多月的时间,debug亲自录制的Java商城秒杀系统的设计与实战视频教程(SpringBoot版)终于完成了!在本课程中,debug真正的将之前所讲解的相关技术融入到了本课程中,即本课程所介绍的秒杀系统是一个真正意义上的项目...

    崔晓明 评论0 收藏0
  • 从小白程序员一路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0
  • AI学习路线

    摘要:针对公司样本不足,采用小样本技术和深度学习技术结合,是项目落地的解决方案。深度学习作为当前机器学习领域最热门的技术之一,已经在图像处理领域获得了应用,并且展现出巨大的前景。旨在帮助同学们快速上手如何使用库来完整机器学习案例。 阶段一、人工智能基础 - 高等数学必知必会 本阶段主要从数据分析、概率论和线性代数及矩阵和凸优化这四大块讲解基础,旨在训练大家逻辑能力,分析能力。拥有良好的数学基...

    xuweijian 评论0 收藏0
  • spring boot - 收藏集 - 掘金

    摘要:引入了新的环境和概要信息,是一种更揭秘与实战六消息队列篇掘金本文,讲解如何集成,实现消息队列。博客地址揭秘与实战二数据缓存篇掘金本文,讲解如何集成,实现缓存。 Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控 - 掘金Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 评论0 收藏0
  • 实战Java虚拟机之二“虚拟机的工作模式”

    摘要:今天开始实战虚拟机之二虚拟机的工作模式。总计有个系列实战虚拟机之一堆溢出处理实战虚拟机之二虚拟机的工作模式实战虚拟机之三的新生代实战虚拟机之四禁用实战虚拟机之五开启编译目前的虚拟机支持和两种运行模式。 今天开始实战Java虚拟机之二:虚拟机的工作模式。 总计有5个系列实战Java虚拟机之一堆溢出处理实战Java虚拟机之二虚拟机的工作模式实战Java虚拟机之三G1的新生代GC实战Jav...

    focusj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<