Linux中斷一:初看Linux中斷

 中斷是Linux核心中比較難而且比較重要的一部分,如果想掌握這些東西,理解是首當其衝的一個重要環節。所謂的痛點,新知識,如果完全理解了原理,至少相當於掌握了80%,這對於任何知識都一樣,所謂真正理解,就是要完全瞭解這塊東西,引入的緣由以及如何引入的,特別是和其他模組之間的聯絡,以及包含在其中的眾多思想。 Linux核心,說到底還是上層軟體和底層硬體的橋樑。對上層,提供系統調用(當然其就是一個中斷,即128或0x80向量),對硬體,提供中斷機制,便是其中重要的一部分,當然還有其他方面,暫不談。 

linux select 用法

select系統調用是用來讓我們的程式監視多個檔案控制代碼(file descriptor)的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有某一個或多個發生了狀態改變。檔案在控制代碼在Linux裡很多,如果你man某個函數,在函數傳回值部分說到成功後有一個檔案控制代碼被建立的都是的,如man socket可以看到“On success, a file descriptor for the new socket is returned.”而man 2

linux select 非同步聊天程式,比較好

什麼是非同步通訊?就是通訊任意一方可以任意發送訊息,有訊息來到時會收到系統提示去接收訊息。這裡要用到select函數。使用步驟如下:1、設定一個集合變數,用來存放所有要判斷的控制代碼(file descriptors:即我們建立的每個socket、用open開啟的每個檔案等)2、把需要判斷的控制代碼加入到集合裡3、設定判斷時間4、開始等待,即select5、如果在設定的時間內有任何控制代碼狀態變化了就馬上返回,並把控制代碼設定到集合裡伺服器端原始碼如下:#include <stdio.h&

linux核心同步方式–自旋鎖

自旋鎖:是linux核心中最常見的鎖,自旋鎖最多隻能被一個可執行線程持有,如果一個執行線程試圖獲得一個被持有的自旋鎖,那麼該線程會一直進行忙迴圈,旋轉,等待鎖重新可用.在任何時候,自旋鎖都可以防止多於一個的執行線程同時進入臨界區,一個被爭用的自旋鎖會導致請求他的線程在等待鎖重新可用時自旋,所以自旋鎖不應被長期持有.這也是自旋鎖的初衷:在短期內進行輕量級加鎖.自旋鎖的實現與體繫結構密切相關,代碼往往通過彙編實現.這些與體繫結構相關的代碼定義在<asm/spinlock.h>檔案中,實際

實現linux的自動登入–命令列模式啟動

linux的登入主要是由兩個檔案在控制,/usr/sbin/getty來獲得使用者名稱,並進行檢查使用者名稱是否存在,然後將使用者名稱傳遞給/usr/bin/login來擷取使用者輸入密碼和檢查密碼是否正確.所以要實現linux的自動登入,就要改動這兩個檔案.1.getty實現的主要功能是:  1)開啟指定的tty;  2)提示使用者登入(login:);  3)獲得登入使用者名稱;  4)把使用者名稱傳遞給login命令  2.login實現的主要功能是:    1)先檢車是不是超級使用者; 

Linux核心訊號處理機制介紹

 本文簡單介紹下Linux訊號處理機制,為介紹二進位翻譯下訊號處理機製做一個鋪墊。本文主要參考書目《Linux核心原始碼情景分析》《獨闢蹊徑品核心:Linux核心原始碼導讀》首先,先說一下什麼是訊號。訊號本質上是在軟體層次上對中斷機制的一種類比,其主要有以下幾種來源:程式錯誤:除零,非法記憶體訪問…外部訊號:終端Ctrl-C產生SGINT訊號,定時器到期產生SIGALRM…顯式請求:kill函數允許進程發送任何訊號給其他進程或進程組。在Linux下,可以通過以下命令查看系統所有的訊號:kill

完全定製個人化linux安裝介面

最近定製了一個ubuntu的安裝介面,感覺比較有意思,寫上來,有興趣的朋友可以實踐一下... 先介紹一下grub和isolinux,以及一些開機引導程式...1)BIOS:basic input output system,一般的情況下是歸結於firmware這一類的.這裡是為了串連通順,就簡單的說一下bios.BIOS是使用者在按下電源的那一刻,負責和硬體溝通並呈現到使用者面前的那些資訊,可以通過顯示器看到的.BIOS做的工作主要有四點:    

linux多進程編程

 在linux中,啟動並執行一個進程,會佔去linux的三個地方,代碼區,堆棧區和資料區.如果同時運行多個相同的程式,他們就會使用相同的代碼區,代碼區中存放的就程式的代碼,但是資料區和堆棧區分別存放的是程式的資料,全域變數和局部變數,因此即使是相同的程式,也不可同時使用相同的資料和堆棧區. #include<stdio.h>#include<unistd.h>int main(){     if(fork() == 0)     {         

Linux編程基礎1 GCC程式編譯

一 簡介        GCC(GNU Compiler Collection,GNU編譯器套裝),是一套由 GNU 開發的程式設計語言編譯器。它是一套GNU編譯器套裝以 GPL 及 LGPL許可證所發行的自由軟體,也是 GNU 計劃的關鍵區段,亦是自由的類Unix及蘋果電腦 Mac OS X 作業系統的標準編譯器。二 編譯過程2.1 編譯包含一下四個步驟:        1. 預先處理(Pre-Processing)        2. 編譯(Compiling)        3.

Linux-2.6 核心非強制中斷(softirq)執行分析

        今天無意中看了眼 2.6 核心的非強制中斷實現,發現和以前我看到的大不相同(以前也是走馬觀花,不大仔細),能說改動非常大。連 softirq 的調用點都不相同了,以前是三個調用點,今天搜尋了一下原始碼,發目前多出了ksoftirqd 這個東西後,softirq 在系統中的調用點僅是在 ISR 返回時和使用了 local_bh_enable() 函數後被調用了。網卡部分的顯示調用,我覺得應該不算是系統中的調用點。ksoftirqd 返回去調用 do_softirq()

Linux-2.6-32的核心棧和使用者空間棧關係

 1.進程的堆棧核心在建立進程的時候,在建立task_struct的同事,會為進程建立相應的堆棧。每個進程會有兩個棧,一個使用者棧,存在於使用者空間,一個核心棧,存在於核心空間。當進程在使用者空間運行時,cpu堆棧指標寄存器裡面的內容是使用者堆棧地址,使用使用者棧;當進程在核心空間時,cpu堆棧指標寄存器裡面的內容是核心棧空間地址,使用核心棧。 2.進程使用者棧和核心棧的切換當進程因為中斷或者系統調用而陷入核心態之行時,進程所使用的堆棧也要從使用者棧轉到核心棧。進程陷入核心態後,先把使用者態堆棧

Linux下gethostbyname函數調用

0.前段時間做一個項目,需要根據hostname來解析對應的ipaddress,就想到了這個函數gethostbyname。所以就尋找對應函數。1.大致流程如下:應用的標頭檔:#include <netdb.h>函數和資料結構: struct hostent  *gethostbyname(const char *hostname);       此函數返回的非null 指標指向下面的hostent結構:                      structhostent {   

Linux編程基礎4 終端快速鍵

一 游標移動        Ctrl+a:游標回到命令列首。 (a:ahead)        Ctrl+e:游標回到命令列尾。 (e:end)        Ctrl+b:游標向行首移動一個字元。 (b:backwards)        Ctrl+ f:游標向行尾移動一個字元。 (f:forwards)二 曆史        Ctrl+p: 上一個使用的曆史命令。 (p:previous)        Ctrl+n: 下一個使用的曆史命令。(n:next )     

Linux man 後面的數字含義及作用

平時我們開發中碰到陌生的命令或者函數,通常會找man來協助下,通過man後面加的數字可以看到關於命令或者函數更深層次的東西。或者通過比較命令和函數加深瞭解你需要的知識。如下是man後面的數字代表的含義。Section 1user commands (introduction)Section 2system calls (introduction)Section 3library functions (introduction)Section 4special files

Linux編譯連結問題—-靜態庫和動態庫

1.      Linux靜態庫和動態庫的命名規則:靜態函數庫:靜態庫的名字一般是libxxx.a,利用靜態庫編譯產生的檔案比較大,因為整個靜態庫所有的資料都會被整合進目標代碼中。a)      優點:編譯後,可執行檔不需要外部支援;b)      缺點:產生的可執行程式大;靜態庫改變了,就需要重新編譯可執行程式。 動態函數庫:動態庫的名字一般是libxxx.so,相對於靜態庫,動態函數庫在編譯的時候並沒有被編譯進目標代碼中,你的程式執行到相關函數時才調用函數庫裡面相應的函數,因此使用動態函數庫

Linux開發社區及資源匯總

1. Android開發官網(尼瑪的,這樣的網站偶爾也會被牆,所以那個時候會很慢)http://developer.android.comandroid開發人員官方首頁,這個是基礎的基礎,絕對不會有差錯,偶爾被牆,有大量資料,但是基本都是英文的,需要英文基礎~2. eoeAndroid開發人員論壇(推薦)http://www.eoeandroid.com , http://android.eoe.cn , http://www.eoe.cn暫時發現資料很全!3. AndDev(推薦)http:/

linux進程之fork vs vfork

在fork之後,子進程和父進程都會繼續執行fork調用之後的指令。子進程是父進程的副本。它將獲得父進程的資料空間,堆和棧的副本,這些都是副本,父子進程並不共用這部分的記憶體。也就是說,子進程對父進程中的同名變數進行修改並不會影響其在父進程中的值。但是父子進程又共用一些東西,簡單說來就是程式的本文段。本文段存放著由cpu執行的機器指令,通常是read-only的。由於在fork之後我們常常都是跟個exec在後面,所以為了提高效率,很多的實現並不完全複製資料區段和堆、棧,而是採用寫時複製,有點類似於

linux 系統啟動停在starting sendmail和starting sm-client

     最近虛擬機器在啟動Linux系統時,總是停在starting sendmail上很長時間,接下來的starting sm-client也是異常的慢。後來查資料,才知道原來是和更改hostname有關。回想一下,自己曾經確實是改了hostname。但是只是修改了設定檔(/etc/sysconfig/network)。網上有說“這是因為 sendmail 的 server name (預設為 hostname) 不能為gethostbyaddr 所解析所致,不能解析時會等 timeout,

Linux framebuffer tutorial

Linux 2.2 Framebuffer Device Programming Tutorial This is a quick document I produced while figuring out how to use the framebuffer device to produce graphics on the Linux console. I don't claim to be an expert in this area, but when I looked for a

linux socket開發基礎

    這是關於如何用各種可以得到的介面為Linux開發網路程式的系列文章的第一篇。就像大多數Unix-based的作業系統一樣,Linux支援將TCP/IP作為本地的網路傳輸協議。在這個系列中,我們假定你已經比較熟悉Linux上的C編程和Linux的一些系統知識諸如signals,forking等等。  這篇文章是關於如何用BSD套介面建立網路程式的基礎介紹

總頁數: 3662 1 .... 660 661 662 663 664 .... 3662 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.