Time of Update: 2018-12-04
我覺得作者講的學習方法很好值得看看。下面是本書作者所寫:幾乎每一個作業系統核心的學習者在初學階段都會感覺到難以入門。這是由於核心涉及到知識面非常廣泛,需要學習者從根本上掌握大量的知識,這包括:程式編譯,連結,裝載的細節,作業系統理論,電腦系統體繫結構,資料結構與演算法,深厚的C/組合語言編程功底。如此相對較高的門檻常常令很大一部分初學者望而卻步。那麼是不是一定要先學好以上的各門知識後才能學習核心呢?事實上大部分學習者在學習以上各門知識都會遇到同樣的問題,因為知識是一個網狀結構。所以重要的不是先去
Time of Update: 2018-12-04
核心模組是Linux核心向外部提供的一個插口,其全稱為動態可載入核心模組(Loadable Kernel Module,LKM),我們簡稱為模組。Linux核心之所以提供模組機制,是因為它本身是一個單核心(monolithic kernel)。單核心的最大優點是效率高,因為所有的內容都整合在一起,但其缺點是可擴充性和可維護性相對較差,模組機制就是為了彌補這一缺陷。一、
Time of Update: 2018-12-04
文章目錄 出生開始工作評定動態職稱O(1)調度對交際花的優惠政策公司裡的超級特權階級-小霸王(real-time process) 轉載:http://www.manio.org/cn/scheduling-of-linux-view-of-society.htmlWritten by manio
Time of Update: 2018-12-04
文章目錄 BIOS完成下面的功能:Bootloader的工作Setup()的工作start_kernel()的工作 原文地址:http://www.manio.org/cn/startup-of-linux-view-of-society.html其實這才應該是這一系列文章的第一節,因為這篇文章講的是Apsara Distributed File System開天地的事。話說Mr.
Time of Update: 2018-12-04
本篇討論IP包的收發(暫不包括路由)先來看inet_init,首先是調用proto_register,註冊了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各種slab_cache,後半部分把這些struct
Time of Update: 2018-12-04
作業系統的調度有CPU調度 CPU schedulerIO調度 IO scheduler IO調度器的總體目標是希望讓磁頭能夠總是往一個方向移動,移動到底了再往反方向走,這恰恰就是現實生活中的電梯模型,所以IO調 度器也被叫做電梯. (elevator)而相應的演算法也就被叫做電梯演算法. 而Linux中IO調度的電梯演算法有好幾種,as(Anticipatory),cfq(Complete Fairness Queueing),deadline,noop(No
Time of Update: 2018-12-04
waitpid waitpid(等待子進程中斷或結束) 表標頭檔 #include<sys/types.h> #include<sys/wait.h> 定義函數 pid_t waitpid(pid_t pid,int * status,int options); 函數說明 waitpid()會暫時停止目前進程的執行,直到有訊號來到或子進程 結束。如果在調用 wait()時子進程已經結束,則 wait()會立即 返回子進程結束狀態值。
Time of Update: 2018-12-04
學習這麼長時間,一直在C語言這一層面上鑽研和打拚,日積月累,很多關於C的疑惑在書本和資料中都難以找到答案。程式員是追求完美的一個種群,其頭 腦中哪怕是存在一點點的思維黑洞都會讓其坐臥不寧。不久前在itput論壇上偶得《Computer Systems A Programmer's Perspective》(以下稱CS.APP)這本經典好書,中文有翻譯的《深入理解電腦系統》。是遂連夜拜讀以求解惑。雖說書中沒有能正面的回答我的一些疑惑,但是它卻為我指明了一條通向 “無惑”之路 --
Time of Update: 2018-12-04
在linux的網路編程中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為在核心中的select實現中,它是採用輪詢來處理的,輪詢的fd數目越多,自然耗時越多。並且,在/usr/include/linux/posix_types.h標頭檔有這樣的聲明:#define __FD_SETSIZE 1024表示select最多同時監聽1024個fd,
Time of Update: 2018-12-04
網路檔案系統(NFS,Network File System)是一種將遠程主機上的分區(目錄)經網路掛載到本地系統的一種機制,通過對網路檔案系統的支援,使用者可以在本地系統上像操作本地分區一樣來對遠程主機的共用分區(目錄)進行操作。在嵌入式Linux 的開發過程中,開發人員需要在Linux 伺服器上進行所有的軟體開發,交叉編譯後,通用FTP 方式將可執行檔下載到嵌入式系統運行,但這種方式不但效率低下,且無法實現線上的調試。因此,可以通過建立NFS,把Linux
Time of Update: 2018-12-04
這篇延續上一篇的內容,通過幾個典型情境來分析dm-ioband的工作流程。第一個情境是 http://sourceforge.net/apps/trac/ioband/wiki/dm-ioband/man/examples 中的example 1,首先調用命令建立兩個ioband device,# echo "0 $(blockdev --getsize /dev/sda1) ioband /dev/sda1 1 0 0 none weight 0 :80" | dmsetup create
Time of Update: 2018-12-04
dm-ioband並沒有整合在mainstream kernel裡,需要打patch才能用,而且,必須是kernel社區的源碼,像我用紅帽子的kernel打patch是會報錯的。。。http://sourceforge.net/apps/trac/ioband/wiki/dm-ioband下載patch完了之後打上,然後make menuconfig,這時在lvm/raid/devicemapper下面把ioband模組勾選上,重新編譯安裝核心,重啟之後lsmod | grep
Time of Update: 2018-12-04
這篇重點講述cgroup如何控制blkio子系統的qos,首先看下設定blkio.weight blkio.weight_device 我的理解是blkio.weight是整個io子系統的權重值,而blkio.weight_device是針對特定的 major:minor 裝置的權重blkio.throttle.read_bps_device blkio.throttle.write_bps_device blkio.throttle.read_iops_device
Time of Update: 2018-12-04
首先介紹下pthread_cond_t。 在Linux下稱之為狀態變數,與之相關的有下面幾個API: int pthread_cond_init (pthread_cond_t *COND,pthread_condattr_t *cond_ATTR); int pthread_cond_signal (pthread_cond_t *COND); int pthread_cond_broadcast (pthread_cond_t *COND); int
Time of Update: 2018-12-04
接著上一篇,繼續討論如何利用pthread_cond_t來實現sem_t。目前的Linux核心都支援訊號量sem_t,但也有一些老的OS,如AIX4,和早期的Solaris並不支援訊號量,畢竟semaphore這個東東並沒有包括在POSIX標準裡。這種情況下有必要利用pthread_mutex_t + pthread_cond_t來類比semaphore啦。(什嗎?pthread_mutex_t pthread_cond_t也不支援? !@#¥%!) 其實實現起來真的很簡單, class
Time of Update: 2018-12-04
這篇是我臨時加的,本來不打算放在整個核心協議棧分析的系列裡的,但我現在覺得vlan還是蠻重要的,而且討論vlan源碼的文章很少,不知道我這篇算不算第一篇 vlan的代碼都在net/8021q/的核心目錄下,首先我們來看8021q模組 (net/8021q/vlan.c)vlan_proto_init , vlan_cleanup_module 是模組的init/exit函數,我們來看vlan_proto_init,vlan_cleanup_module基本就是反過來做一遍static int
Time of Update: 2018-12-04
inode是一個重要概念,是理解Unix/Linux檔案系統和硬碟儲存的基礎。我覺得,理解inode,不僅有助於提高系統操作水平,還有助於體會Unix設計哲學,即如何把底層的複雜性抽象成一個簡單概念,從而大大簡化使用者介面。下面就是我的inode學習筆記,盡量保持簡單。一、inode是什嗎?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做"扇區"(Sector)。每個扇區儲存512位元組(相當於0.5KB)。作業系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而
Time of Update: 2018-12-04
cgroups全稱control groups,在RHEL6的2.6.32核心中已經包括了cgroup的patch。這裡強烈建議安裝RHEL6(CentOS6)來使用cgroups,如果沒有的話,只能升級核心了 ( > 2.6.26版本) 下面的例子通過對cgroups的blkio, cpuset, memory三個子系統的實現來示範如何應用cgroups,我們這裡不使用紅帽子的libcgroup package提供的工具,通過該工具進行cgroup的操作詳見這篇 http://docs.
Time of Update: 2018-12-04
1. /proc/sys/net/core/rmem_max — 最大的TCP資料接收緩衝2. /proc/sys/net/core/wmem_max — 最大的TCP資料發送緩衝3. /proc/sys/net/ipv4/tcp_timestamps — 時間戳記在(請參考RFC 1323)TCP的包頭增加12個位元組4. /proc/sys/net/ipv4/tcp_sack — 有選擇的應答5. /proc/sys/net/ipv4/tcp_window_scaling —
Time of Update: 2018-12-04
看了一堆RCU的文檔,總結一下,這玩意兒實際編程用得不多,權當自娛自樂https://www.ibm.com/developerworks/cn/linux/l-rcu/LDD3rd中 linux同步機制 章節有對RCU比較透徹的介紹http://hi.baidu.com/j_fo/blog/item/6e7f74c60711381d9c163df2.htmlhttp://www.rdrop.com/users/paulmck/rclock/http://lse.sourceforge.net/