原创 open-iscsi源碼分析 -- 進程通信

前面分析了open-iscsi主要有一個守護進程iscsid,即通過本地socket和用戶其他進程通信,比如iscsiadm管理執行任務時,需要和iscsid通信,iscsi的底層驅動則通過netlink和iscsid通信,而用戶態其他

原创 C語言函數返回類型爲指針時的一些問題

1.先看程序: #include<stdio.h> char  *returnStr() {            char  *p = “tigerjibo”;            return  p; } int

原创 淺談服務器編程

第一部分 編程模型 1、服務器編程模型 關於server編程模型,大師stevens在他的《UNP》一書中已經做了詳細論述,這裏不再重複,這裏主要講一下我的一些理解。 從線程的角度,可以分爲兩類,一是單線程,一是多線程。先來看單

原创 C語言中的可變參數

C語言的變長參數在平時做開發時很少會在自己設計的接口中用到,但我們最常用的接口printf就是使用的變長參數接口,在感受到printf強大的魅力的同時,是否想挖據一下到底printf是如何實現的呢?這裏我們一起來挖掘一下C語言變長參數的奧

原创 C語言中長度爲0的數組

前面在看Xen的源碼時,遇到了一段代碼,如下所示: 注意上面最後一行的代碼,這裏定義了一個長度爲的數組,這種用法可以嗎?爲什麼可以使用長度爲0 的數組?長度爲的數組到底怎麼使用?……這篇文章主要針對該問題進行簡單的講解。廢話不多說

原创 C語言字節對齊

一、概念         對齊跟數據在內存中的位置有關。如果一個變量的內存地址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變量的地址爲0x00000004,那它就是自然對齊的。       二、爲什麼要

原创 Linux內核的同步機制

本系列文章分兩部分,第一部分詳細地介紹了Linux 內核中的同步機制:原子操作、信號量、讀寫信號量和自旋鎖的API,使用要求以及一些典型示例。第二部

原创 Linux內核中常見內存分配函數

1.   原理說明 Linux內核中採用了一種同時適用於32位和64位系統的內存分頁模型,對於32位系統來說,兩級頁表足夠用了,而在x86_64系統中,用到了四級頁表,如圖2-1所示。四級頁表分別爲: l  頁全局目錄(Page Glo

原创 open-iscsi源碼分析 -- iscsid

最近用到open-iscsi作用initiator,遇到很多問題,就打算粗率對open-iscsi的源碼進行一個分析。     open-iscsi的組成和用法就不講了,源碼包中的README說得非常清楚,主要分爲驅動和用戶態兩部分,

原创 LINUX SCSI I/O分析

概述 LINUX 內核中 SCSI 子系統由 SCSI 上層,中間層和底層驅動模塊 [1] 三部分組成,主要負責管理 SCSI 資源和處理其他子系統,如文件系統,提交到 SCSI 子系統中的 IO 請求。因此,理解 SCSI 子系統

原创 open-iscsi源碼分析 -- 日誌處理

在iscsid主函數中有:   log_pid = log_init(program_name, DEFAULT_AREA_SIZE, daemonize ? log_do_log_daemon : log_do_log_std, N

原创 Linux I/O調度

Linux I/O調度 一) I/O調度程序的總結     1) 當向設備寫入數據塊或是從設備讀出數據塊時,請求都被安置在一個隊列中等待完成.     2) 每個塊設備都有它自己的隊列.     3) I/O調度程序負責維護這些隊列

原创 Linux可加載內核模塊(LKM)

I.基礎知識 1.什麼是LKM  2.什麼是系統調用 3.什麼是內核符號表 4.如何進行內核與用戶空間內存數據的交換 5.使用用戶空間的各種函數方法

原创 Linux SCSI子系統

M. Tim Jones, 顧問工程師, Emulex Corp. 2007 年 12 月 06 日 Small Computer Systems Interface (SCSI) 是一組標準集,它定義了與大量設備(主要是與存儲相關

原创 open-iscsi源碼分析 -- 流程詳細分析

在iscsid.c文件的main函數中,有: sysfs_init(); 這個函數主要是獲取系統sys目錄: //獲取sys目錄 int sysfs_init(void) { const char *env; /*從環境變量中獲