[TOC]
# 簡介
如果每個程序員都不得不掌握系統的所有細節,那就不可能再編寫代碼了.而且管理這些部件并加以優化使用,是一個挑戰性極強的工作.所以計算機安裝了一個操作系統
# 運行模式
**多數計算機有2種運行模式:內核態和用戶態.**
軟件最基礎是操作系統,他運行在內核態(也稱為管態,核心態),在這個模式中,操作系統對所有硬件有完全訪問權,可以執行機器能夠運行的任何指令.
軟件其他部分運行在用戶態,在用戶態下,只使用了機器指令中的一個子集.特別的,哪些會影響機器的控制或可進行I/O操作的指令,在用戶態是完全禁止的

# 作為一個可擴展的操作系統
**抽象是管理所有復雜性的一個關鍵.好的抽象可以把一個幾乎不可能管理的任務劃分成2個可管理的部分.
其第一部分是有關抽象的定義和實現.
第二部分是隨時用這些抽象解決問題**
操作系統的任務是創建好抽象,并實現和管理它所創建的抽象
# 作為資源管理者的操作系統
**把操作系統看作應用程序提供的基本抽象概念,是一種自頂向下的觀點.
按照另一種自底向上的觀點,操作系統則用來管理一個復雜系統的各個部分**
**資源管理者包括用以下2種不同方式實現多路復用(共享)資源,在時間和空間上復用**
當一種資源在時間上復用時,不同的程序或用戶輪流使用它
空間復用,每個客戶都得到資源的一部分,從而取代客戶排隊,通常在運行程序之間分割內存,這樣每一個運行程序都可以同時入駐內存,假設有足夠多的內存可以放多個程序,那么在內存中同時存放若干個程序的效率,比把所有內存給一個程序效率要高的多,特別是程序只需要內存中的一部分,更是這樣
# 簡單的個人計算機中部件

# 處理器
每個cpu都有一套可執行的專門指令集,所以x86的處理器不能執行ARM程序,而ARM處理器不能處理X86程序
**寄存器**
除了用來保存變量和臨時結果的通用寄存器之外,多數計算機還有一些對程序員可見的專用寄存器.其中之一是**程序計數器**,它保存了將要取出的下一條指令的內存地址,在指令取出之后,程序計數器就被更新以便指向后繼的指令
另一個寄存器是**堆棧指針**,它指向內存中當前棧的頂端,該棧包含了每個執行過程的棧幀.一個過程的棧幀中保存了有關的輸入參數,局部變量以及那些沒有保存在寄存器中的臨時變量
當前還有**程序狀態字**寄存器,這個寄存器包含了條件碼位(由比較指令設置),cpu優先級,模式(用戶態和內核態),以及各種其他控制位,用戶程序通常讀入整個psw,但是只對其中少量的字段寫入.在系統調用和I/O中,psw很重要
無論32位的寄存器,還是64位的寄存器,他們存儲容量都小于1kb
為了改善性能,cpu設計師早就放棄了同時讀取,解碼和執行一條指令的簡單模型.許多現代cpu具有同時取出多條指令的機制
比流水線更先進的設計是超標量的cpu

除了在嵌入式系統中非常簡單的cpu之外,多數cpu有2種模式,前面提到的內核態和用戶態
psw有一個二進制位控制這2個模式,當在內核態運行時,cpu可以執行指定集中的每一條指令,并且使用硬件的每種功能
用戶程序在用戶態下運行,僅允許執行整個指令集的一個子集和訪問所有功能的一個子集,當然將psw模式位設置為內核態也是禁止的
從操作系統中獲得服務,用戶程序必須使用系統調用(system call)以陷入內核態并調用操作系統,TRAP指令把用戶態切換成內核態,并啟用操作系統,操作完成切換為用戶態
# 超線程

# GPU
其實在絕對數目方面,沒什么能跑贏現代的GPU.GPU指的是由成千上萬個微核組成的處理器.他們擅長處理大量并行的簡單計算,比如在圖像應用中渲染多邊形.他們不太能勝任串行任務,并且很難編程.雖然CPU對操作系統很有用(比如加密或處理網絡傳輸),當操作系統本身不太可能運行在GPU上
# 高速緩存
高速緩存命中,緩存滿足了請求,就不需要通過總線把訪問請求送往主存.
高速緩存命中通常需要2個時鐘周期.高速緩存沒有命中就要訪問主存了,這需要付出大量的時間代價
由于高速緩存價格昂貴,所以大小有限,有些機器具有2級甚至3級高速緩存,每一級緩存比前一級慢并且容量大
現代cpu設置了2個緩存,第一級稱為L1緩存,總是在cpu中,用來將已解碼的指令調入cpu的執行引擎.對于那些頻繁使用的數據字,多數芯片安排有第二個L1緩存,典型的L1緩存大小為16kb,另外,往往還設計有二級緩存稱為L2緩存,用來存放進來使用過的若干兆字節的內存字,L1和L2緩存之間的差別在于時序.對于L1緩沖的訪問,不存在任何延遲,而對于L2緩存的訪問,則會延遲1或2個時鐘
# 磁盤
磁盤結構

最近流行的固態硬盤,叫閃存,如果閃存擦除的次數過多,就被磨損了
# 總線

# posix
- 書列表
- laravel框架關鍵技術
- 第一章 組件化開發與composer使用
- 簡介
- composer
- 添加路由組件
- 添加控制器模塊
- 添加模型組件
- 添加視圖組件
- 第三章 laravel框架中常用的php語法
- 匿名函數
- 文件包含
- 魔術方法
- 魔術常量
- 反射
- 后期靜態綁定
- traits
- 第四章 laravel框架中使用的HTTP協議基礎
- HTTP協議
- 數據庫
- 數據遷移
- 第六章 laravel框架中的設計模式
- IOC模式
- php核心技術與最佳實踐
- 第一章面向對象核心
- 反射
- 簡單ORM
- 異常和錯誤
- 接口
- 第二章,面向對象設計
- 設計原則
- 單一職責
- 接口隔離
- 開放封閉
- 替換原則
- 依賴倒置
- linux是怎么寫的呢?
- 第三章 正則表達
- 認識正則
- 第四章 php網絡技術應用
- HTTP協議詳解
- php和http相關函數
- 垃圾信息防御措施
- 現代操作系統
- 引論
- sql必知必會
- 限制結果
- 按位置排序
- where求職順序
- IN操作符
- like
- 函數
- group by
- 組合查詢
- 插入檢索出的數據
- 視圖
- 高性能mysql
- 第一章節 mysql架構與歷史
- mysql架構邏輯圖
- 連接與管理
- 優化與運行
- 讀寫鎖
- 鎖粒度
- 表鎖(table lock)
- 行級鎖(row lock)
- ACID
- 隔離級別
- 死鎖
- 隱式和顯式鎖定
- 多版本并發控制
- Innodb概覽
- 第四章節 Schema與數據類型優化
- 選擇優化的數據類型
- 日期和時間類型
- 標識列
- 特殊類型數據
- 表設計中的缺陷
- 范式
- 計數器表
- 第五章 創建高性能索引
- 索引基礎
- 索引類型
- 索引的優點
- 高性能索引策略
- 選擇合適的索引列順序
- 聚簇索引
- 順序的主鍵什么時候會造成更壞的后果
- 覆蓋索引
- 使用索引掃描來做排序
- 壓縮索引
- 冗余和重復索引
- 索引和鎖
- 支持多種過濾條件
- 什么是范圍條件
- 優化排序
- 維護索引和表
- 表損壞
- 減少索引和數據的碎片
- 第六章 查詢性能優化
- 掃描的行數和訪問類型
- 重構查詢方式
- 查詢執行的基礎
- 重構-改善既有代碼設計
- 第一章-重構
- 什么是重構
- 第一個案列
- 重構第一步
- 王垠博客
- 多態取代價格相關邏輯