操做系统原理

无锁编程
    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

    
相关文章
相关标签/搜索