kernel synchronization模塊
先放這里吧,內核的知識卻好似并不長那個用。
[https://e-mailky.github.io/2016-10-13-linux\_kernel\_sync](https://e-mailky.github.io/2016-10-13-linux_kernel_sync)
[https://my.oschina.net/u/4362986/blog/3852572](https://my.oschina.net/u/4362986/blog/3852572)
[https://tocreate.app/2018/12/10/OSsynchro/](https://tocreate.app/2018/12/10/OSsynchro/)
kernel就像一個服務員要處理兩種請求,由boss發起的請求與客戶發起的請求。
1 waiter idle boss calls(什么叫boss call?),waiter server boss。
2 boss call waiter servicing customer,優先serviceing boss。
3 boss call waiter servicing anoth boss, servicing second one。第二個結束,在回到前一個。
4 在處理完最后一個boss的請求后,waiter決定暫時放棄customer選擇一個新的。
cpu處于user mode 的時候,waiter就是idle。
中斷就是boss的請求, 由用戶模式進程或者系統調用是customer。
user Mode processes想要請求kernel的話會先發起一個指令。 強制cpu從user mode切換到kernel mode。
進程在執行內核功能時,進程以內核模式運行時,可能發生進程切換,則內核是搶占式。在搶占式和非搶占式內核中,運行在kernel mode的進程可以自愿放棄CPU,比如需要去睡眠等待一些資源。這種被陳作有計劃的進程切換。
搶占式內核是指在內核功能中,以內核模式運行的進程可以被另一個進程替換。
**一、原子操作**
原子操作的概念來源于物理概念中的原子定義,指執行結束前不可分割(即不可打斷)的操作,是最小的執行單位。
**二 、自旋鎖(spinlock)**
自旋鎖是這樣一種同步機制:若自旋鎖已被別的執行者保持,調用者就會原地循環等待并檢查該鎖的持有者是否已經釋放鎖(即進入自旋狀態),若釋放則調用者開始持有該鎖。自旋鎖持有期間不可被搶占。
**三、信號量(Semaphore)**
Linux內核的信號量在概念和原理上與用戶態的System V的IPC機制信號量是一樣的,但是它不可能在內核之外使用,因此它與System V的IPC機制信號量完全不同。
信號量是這樣一種同步機制:信號量在創建時設置一個初始值count,用于表示當前可用的資源數。一個任務要想訪問共享資源,首先必須得到信號量,獲取信號量的操作為count-1,若當前count為負數,表明無法獲得信號量,該任務必須掛起在該信號量的等待隊列等待;若當前count為非負數,表示可獲得信號量,因而可立刻訪問被該信號量保護的共享資源。當任務訪問完被信號量保護的共享資源后,必須釋放信號量,釋放信號量通過把count+1實現,如果count為非正數,表明有任務等待,它也喚醒所有等待該信號量的任務。
**四、互斥鎖(Mutex)**
Linux 內核互斥鎖是非常常用的同步機制,互斥鎖是這樣一種同步機制:在互斥鎖中同時只能有一個任務可以訪問該鎖保護的共享資源,且釋放鎖和獲得鎖的調用方必須一致。因此在互斥鎖中,除了對鎖本身進行同步,對調用方(或稱持有者)必須也進行同步。當互斥鎖無法獲得時,task會加入等待隊列,直至可獲得鎖為止。
- 文章翻譯
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的過去,未來與現在
- Demystifying Istio Circuit Breaking
- 知識圖譜
- skill level up graph
- 一、運維常用技能
- 1.0 Vim (編輯器)
- 1.1 Nginx & Tengine(Web服務)
- 基礎
- 1.2 zabbix
- 定義
- 登錄和配置用戶
- 1.3 RabbitMQ(消息隊列)
- 原理
- RabbitMQ(安裝)
- 1.4虛擬化技術
- KVM
- 1.5 Tomcat(Web中間件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(負載均衡高可用)
- 1.9 Memcache(分布式緩存)
- 1.10 Zookeeper(分布式協調系統)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(運維自動化)
- 1.13 WAF(Web防火墻)
- 1.14 HAproxy負載均衡
- 1.15 NFS(文件傳輸)
- 1.16 Vim(編輯器)
- 1.17 Cobbler(自動化部署)
- 二、常用數據庫
- 2.1 MySQL(關系型數據庫)
- mysql主從復制
- 2.2 Mongodb(數據分析)
- 2.3 Redis(非關系數據庫)
- 三、自動化運維工具
- 3.1 Cobbler(系統自動化部署)
- 3.2 Ansible(自動化部署)
- 3.3 Puppet(自動化部署)
- 3.4 SaltStack(自動化運維)
- 四、存儲
- 4.1 GFS(文件型存儲)
- 4.2 Ceph(后端存儲)
- 五、運維監控工具
- 5.1 云鏡
- 5.2 ELK
- 六、運維云平臺
- 6.1 Kubernetes
- 6.2 OpenStack
- 介紹
- 安裝
- 七、Devops運維
- 7.1 理念
- 7.2 Devops運維實戰
- 八、編程語言
- 8.1 Shell
- 書籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法與數據結構
- 九、雜記
- 高優先級技能
- 知識點
- JD搜集
- 明顯的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遺漏知識點
- 1.18.3 GCP、azure、aliyun
- Azure文檔
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源碼學習
- Scheduler源碼
- 調度器入口
- 調度器框架
- Node篩選算法
- Node優先級算法
- pod搶占調度
- 入口
- 主要代碼結構
- new
- 文章翻譯
- Flannel
- 從二進制集群搭建
- 信息收集
- docker優化
- 1.2 shell
- 面試題
- grep awk sed 常見用法
- shell實踐
- 1.3 Data structure(數據結構)
- Calico
- Aliyun文檔以及重點模塊
- git
- 大數據組件
- 前端,后端,web框架
- cgroup,namespace
- 內核
- Linux搜集
- crontab
- centos7常用優化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能問題排查與分析
- 性能分析搜集
- 性能分析常用10條
- 網絡性能優化
- 文本處理命令
- sql
- Iptables
- python面試題
- iptables
- iptables詳細
- zabbix面試題,proj
- prometheus
- web中間件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平臺
- 書籍Linux應用技巧
- kafka
- kafka面試題
- ETCD
- Jenkins
- 3天補充的點
- K8s源碼
- K8s
- k8s實操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow問答精選
- 問題
- 我對于學習思考
- 修改ssh超時時間
- 課程目錄
- 運維與運維開發
- The Person
- 個人雜談
- mysql主從復制
- 對于工作的認識與思考