原创 Linux 設備驅動 ====> 併發控制 --- 自旋鎖

自旋鎖的使用 自旋鎖(spin_lock)是一種典型的對臨界資源進行互斥訪問的手段,顧名思義,爲了獲得一個自旋鎖,在某CPU上運行的代碼需要先執行一個原子操作,該操作測試並設置某個內存變量,在該操作完成之前其他執行單元不可能訪問到這個

原创 Linux 設備驅動 ====> 字符驅動

開始從頭學起linux 設備驅動,當然是先從字符驅動看起。 下面仿照着書上的例子,寫了一個misc 字符驅動。 [cpp] view plaincopy root@jay-LJ:/home/jay/glo

原创 Linux 設備驅動 ====> 併發控制 --- 信號量與互斥體

信號量 信號量的使用 信號量(semaphore)是用於保護臨界區的一種常用方法,他的用法和自旋鎖類似,但是,與自旋鎖不同的是,當獲取不到信號量時,進程不會原地打轉,而是進入休眠等狀態。 Linux中信號量的操作主要有 1.

原创 調用fork兩次以避免僵死進程

如果一個進程fork一個子進程,但不要它等待子進程終止,也不希望子進程處於僵死狀態直到父進程終止,實現這一要求的技巧是調用fork2次。 下面是實例代碼: [cpp] view plaincopy #includ

原创 Linux 中直接 I/O 機制的介紹

直接 I/O 的動機 在介紹直接 I/O 之前,這一小節先介紹一下爲什麼會出現直接 I/O 這種機制,即傳統的 I/O 操作存在哪些缺點。 什麼是緩存 I/O (Buffered I/O) 緩存 I/O 又被稱作標準 I/O,大多

原创 Linux 設備驅動 ====> 併發控制 --- 原子操作

原子操作 原子的操作指的就是在執行過程中不會被別的代碼所中斷的操作。 在Linux中原子操作的方法有很多,有整型原子和位原子,他們在任何情況下操作都是原子的,這些原子操作的實現都是依賴CPU來實現的,因此這些函數都與CPU架構密切相

原创 fork與vfork的區別

fork創建一個進程時,子進程只是完全複製父進程的資源,這樣得到的子進程獨立於父進程,具有良好的併發性,但是二者之間的通訊需要通過專門的通訊機制,如:pipe,popen&pclose、協同進程、fifo,System V IPC(消息

原创 fork函數實例

下面是一個fork函數的實例 [cpp] view plaincopy #include <stdio.h>   #include <stdlib.h>   #include <unistd.h>      int

原创 vfork函數實例

一下是vfork函數的實例,跟之前的fork函數類似 [cpp] view plaincopy #include <stdio.h>   #include <stdlib.h>   #include <unistd

原创 linux fork函數與vfork函數

一、fork 1. 調用方法 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 正確返回:在父進程中返回子進程的進程號,在子進程中返回0 錯誤返回:-1    

原创 堆棧,堆棧,堆和棧的區別

堆和棧的區別一、預備知識—程序的內存分配一個由c/C++編譯的程序佔用的內存分爲以下幾個部分1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。2、堆區(heap) — 一般

原创 實現字符串的語序翻轉

如輸入爲“abc” 輸出爲"cba" [cpp] view plaincopy //vs2005   #include "stdafx.h"   #include <iostream>   #include <stri

原创 c語言單鏈表的基本操作(代碼)

c語言實現單鏈表的基本操作:建立、打印、刪除、插入、逆序。僅供學習之用還需不斷完善,有待讀者自己研究 #include <stdio.h> #include <stdlib.h> typedef struct stu { int d

原创 如何添加或刪除ubuntu用戶和組

在創建用戶時,需要爲新建用戶指定一用戶組,如果不指定其用戶所屬的工作組,自動會生成一個與用戶名同名的工作組。創建用戶user1的時候指定其所屬工作組users,例:useradd –g users user1 一、創建用戶: 1

原创 你必須要會的Shell 命令

 shell 介紹=============   Unix 系統分成三個重要部份: 系統核心, Shell, 應用程序   如下圖:   +------------+         +---------+        +----