操做系統原理

無鎖編程
    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

    
相關文章
相關標籤/搜索