博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统原理
阅读量:4469 次
发布时间:2019-06-08

本文共 2517 字,大约阅读时间需要 8 分钟。

无锁编程    Double-checked Locking        在获取锁的前后都进行条件判断,尽可能减少加锁访问(常用于单例)        存在的问题(延迟初始化):            对象初始化分为:内存分配、内存初始化、指针赋值三个阶段。            后两个阶段可能被优化顺序颠倒。        解决方案:            禁止优化volatile(根据机器可能不可行)            写时复制 http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/    原子锁        执行过程不被打断,内核中的原子操作通常是内联函数,一般是通过内嵌汇编指令来完成    Lock-free:确保执行它的所有线程中至少有一个能够继续往下执行        自旋锁 spin-lock            一种很低级的非阻塞锁            应用于多CPU            自旋锁需要锁总线            实现资源的互斥而不是同步        顺序锁 seq-slock            依赖一个序列计数器            当写者写入数据时,会得到一把锁,并且将序列值加1            当读者读取数据之前和之后,该序列号都会被读取,如果序列号值都相同,则表明写没有发生;反之,则放弃已进行的操作,重新循环一次,直至成功            不能保护包含有指针的数据结构,因为当写者修改数据结构时,读者可能会访问一个无效的指针            适用于小概率写,大概率读        RCU Read-Copy Update            通过延迟写来提高同步性能,类似COW            读者不需要获得任何锁就可以访问它            写者在访问它时首先拷贝一个副本,然后对副本进行修改,在适当的时机把指向原来数据的指针重新指向新的被修改的数据            更新时通过原子操作产生内核屏障        https://www.ibm.com/developerworks/cn/linux/l-rcu/index.html    完全无锁        缓冲队列,生产者和消费者需要修改的位置是分开的https://www.ibm.com/developerworks/cn/linux/l-cn-lockfree/index.html用户态与内核态    内核态: CPU可以访问内存所有数据, 包括外围设备    用户态: 只能受限的访问内存, 且不允许访问外围设备http://wely.iteye.com/blog/2332327内存分配原理    https://blog.csdn.net/xuduorui/article/details/75088443内存碎片    内存为程序分配空间有四种分配方式:        连续分配方式            固定分区分配            动态分区分配,有各种算法            可重定位分区分配,紧凑内存解决外部碎片问题,类似JVM        离散分配方式            分页:离散的分配固定分区,满足操作系统的需求,最后一个页有内部碎片(虚拟内存+页表)            分段:离散的分配可变式分区,满足用户的需求,有外部碎片            段页:用分段管理进程地址空间,用分页管理实际内存    内存碎片:        内部碎片:已经分配出去但未被使用的内存(由固定分区导致)        外部碎片:无法分配出去的内存(由可变式分区导致)    http://blog.csdn.net/zephyr_be_brave/article/details/8944967    http://echo.vars.me/os/memory/    http://www.cnblogs.com/zlcxbb/p/5759873.html内存分配算法    Freelist        把内存中空闲块连接起来,进一步的需要制定分配策略和放回策略    Segregated-Freelist        STL::allocator在分配小于128 bytes内存时,使用16个free-list实现memory pool    Buddy-System:二叉树https://zhuanlan.zhihu.com/p/29415507冯诺依曼体系    控制器、运算器、存储器、输入、输出字节对齐    提升CPU访问数据的效率惊群效应    只发生于广播触发多个等待的情形    accept不会导致惊群    对于大多数场景,epoll机制仍然存在“惊群”,用mutex可以解决    https://www.cnblogs.com/Anker/p/7071849.html    系统类型    实时、分时、批处理、网络、分布式    http://www.cnblogs.com/suyuan1573/p/3971574.html    http://www.voidcn.com/article/p-azgtpqev-ku.html中断系统    https://blog.csdn.net/keyue123/article/details/16959111数据库三范式    1NF:列的原子性,即列不能够再分成其他几列    2NF:首先要满足第一范式,其次每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定    3NF:首先要满足第二范式,其次非主属性之间不存在函数依赖(消除传递依赖)http://aijuans.iteye.com/blog/1629645

 

转载于:https://www.cnblogs.com/shaellancelot/p/9021857.html

你可能感兴趣的文章
P2664 树上游戏
查看>>
jQuery 停止动画
查看>>
Sharepoint Solution Gallery Active Solution时激活按钮灰色不可用的解决方法
查看>>
教你50招提升ASP.NET性能(二十二):利用.NET 4.5异步结构
查看>>
lua连续随机数
查看>>
checkstyle使用介绍
查看>>
会了这十种Python优雅的写法,让你工作效率翻十倍,一人顶十人用!
查看>>
二维码图片生成
查看>>
在做操作系统实验的一些疑问
查看>>
Log4J日志配置详解
查看>>
NameNode 与 SecondaryNameNode 的工作机制
查看>>
Code obfuscation
查看>>
大厂资深面试官 带你破解Android高级面试
查看>>
node.js系列(实例):原生node.js实现接收前台post请求提交数据
查看>>
SignalR主动通知订阅者示例
查看>>
用python实现矩阵转置
查看>>
linux 小技巧(磁盘空间搜索)
查看>>
iOS开发——捕获崩溃信息
查看>>
(for 循环)编程找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数
查看>>
tomcat使用spring-loaded实现应用热部署
查看>>