導航:首頁 > 操作系統 > LINUX忙則等待

LINUX忙則等待

發布時間:2022-11-14 10:30:52

1. linux內核中等待隊列的幾種用法

1. 睡眠等待某個條件發生(條件為假時睡眠):
睡眠方式:wait_event, wait_event_interruptible
喚醒方式:wake_up (喚醒時要檢測條件是否為真,如果還為假則繼續睡眠,喚醒前一定要把條件變為真)
2. 手工休眠方式一:
1)建立並初始化一個等待隊列項
DEFINE_WAIT(my_wait) <== wait_queue_t my_wait; init_wait(&my_wait);
2)將等待隊列項添加到等待隊列頭中,並設置進程的狀態
prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
3)調用schele(),告訴內核調度別的進程運行
4)schele返回,完成後續清理工作
finish_wait()
3. 手工休眠方式二:
1)建立並初始化一個等待隊列項:
DEFINE_WAIT(my_wait) <== wait_queue_t my_wait; init_wait(&my_wait);
2)將等待隊列項添加到等待隊列頭中:
add_wait_queue
3)設置進程狀態
__set_current_status(TASK_INTERRUPTIBLE);
4)schele()
5)將等待隊列項從等待隊列中移除
remove_wait_queue()
其實,這種休眠方式相當於把手工休眠方式一中的第二步prepare_to_wait拆成兩步做了,即prepare_to_wait <====add_wait_queue + __set_current_status,其他都是一樣的。
4. 老版本的睡眠函數sleep_on(wait_queue_head_t *queue):

2. linux進程的幾種狀態

Linux中進程分類

①交互進程:由一個shell啟動的進程,交互進程既可以在前台運行,也可以在後台運行。

②批處理進程:這種進程和終端沒有聯系,是一個進程序列。

③監控進程:也稱守護進程,是一個在後台運行且不受任何終端控制的特殊進程,用於執行特定的系統任務。

進程的狀態

①可運行狀態:此時進程正在運行或者正在運行隊列中等待准備運行。

②等待狀態:此時進程在等待一個事件的發生或某種系統資源。在Linux系統中等待狀態又細分為兩種等待狀態:可中斷的等待狀態和不可中斷的等待狀態。

③暫停狀態:處於暫停狀態的進程被暫停運行。

④僵死狀態:每個進程在運行結束後都會處於僵死狀態,等待父進程調用進而釋放系統資源,處於該狀態的進程已經運行結束,但是它的父進程還沒有釋放其系統資源。

3. linux正在等待報頭是什麼意思

你發了個軟體列表的請求,然後就等待伺服器返回信息,報頭就是返回信息的一些資料(地址啊,協議啊之類的)

4. 假如Linux卡住了怎麼解決

首先是抓包,步驟如下
在Linux伺服器上啟動抓包。
從筆記本SSH到Linux伺服器,輸入用戶名並回車。
等待10秒左右,直到登錄界面提示輸入密碼。
停止抓包。
這樣就可以得到一個涵蓋該現象的網路包了。一般在實驗室中沒有干擾流量,不用過濾也可以分析,不過我們最好在做實驗時就養成過濾的習慣,以適應生產環境中抓到的包。因為我們是通過SSH協議登錄的,所以可以直接用「ssh」來過濾,如圖所示。SSH包都是加密了的,因此我們看不出每個包代表了什麼意思,不過這並不影響分析。從圖2中可以看到,21號包和25號包之間恰好就相隔10秒。

這兩個包之間所發生的事件,可能就是導致這個現象的原因。於是我再用「frame.number> 21 && frame.number< 25」過濾,

分析
從圖中可以看到,Linux伺服器當時正忙著向DNS伺服器查詢10.32.200.23的PTR記錄(即反向解析),試圖獲得這個IP地址所對應的域名。該IP屬於我們測試所用的筆記本,但由於DNS伺服器上沒有它的PTR記錄,所以兩次查詢都等了5秒鍾還沒結果,總共浪費了10秒鍾。
我們由此可以推出,這台Linux伺服器在收到SSH訪問請求時,會先查詢該客戶端IP所對應的PTR記錄。假如經過5秒鍾還沒有收到回復,就再發一次查詢。如果第二次查詢還是等了5秒還沒回復,就徹底放棄查詢。我們甚至可以進一步猜測,如果DNS查詢能成功,就不用白等那10秒鍾了。
為了驗證這個猜測,我在DNS伺服器中添加了10.32.200.23的PTR記錄,然後再次登錄。

這一次果然立即登錄進去了。從圖的Wireshark截屏可見,DNS查詢是成功的,所以21號包和26號包之間幾乎是沒有時間停頓的。
結果
明白了DNS查詢就是問題的起因,接下來就知道怎麼進一步研究了。只要在Google搜索「ssh dns」,第一頁出來的鏈接都是關於這個問題的。隨便挑幾篇閱讀一下,就連我這樣的Linux初學者都能把這個問題研究透了。原來這個行為是定義在「/etc/ssh/sshd_config」文件中的,默認配置是這樣的:
[root@Linux_Server ~]# cat /etc/ssh/sshd_config |grep -i usedns #UseDNS yes
改成下面這樣就可以解決了,不用去動DNS伺服器上的配置:
[root@Linux_Server~]# cat /etc/ssh/sshd_config |grep -i usedns UseDNS no

5. linux分區和格式化總是出現設備忙

8G的硬碟,255個磁面,63個扇區,1044個磁柱
每個cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(約)=8.225280M(約);

>>> Device Boot Start/End Blocks Id System
>>> 設備地址、引導分區、起始/終止塊、容量、 分區類型ID、分區類型

硬碟分區的表示:在Linux 是通過hd*x 或 sd*x 表示的,其中 * 表示的是a、b、c ... ... x表示的數字 1、2、3 ... ... hd大多是IDE硬碟;sd大多是SCSI或移動存儲;
引導(Boot):表示引導分區,在上面的例子中 hda1 是引導分區;
Start (開始):表示的一個分區從X cylinder(磁柱)開始;
End (結束):表示一個分區到 Y cylinder(磁柱)結束;
id和System 表示的是一個意思,id看起來不太直觀,我們要在fdisk 一個分區時,通過指定id來確認分區類型;比如 7表示的就NTFS 分區;這個在fdisk 中要通過t功能來指定。下面的部份會提到;
Blocks(容量):這是我翻譯的,其實不準確,表示的意思的確是容量的意思,其單位是K;一個分區容量的值是由下面的公式而來的; Blocks = (相應分區End數值 - 相應分區Start數值)x 單位cylinder(磁柱)的容量 所以我們算一下 hda1的 Blocks 的大小 : hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M 註:換算單位以硬碟廠家提供的10進位算起,如果以操作系統二進制來算,這個分區容量應該更少一些,得出的這個值和我們通過 fdisk -l 看到的 /dev/hda1的值是大體相當的,因為換算方法不一樣,所以也不可能盡可能的精確;再加上分區時的一點損失之類,有時或大或小是存在的;我們查看分區大小或者文件的時候,還是用十進制來計算比較直觀;推算辦法是 byte 向前推小數點三位就是K ,K單位的值向前推小數點三位就是M,M向前推小數點三位就是G... ... 一般也差不了多少;這么算就行

6. linux虛擬機中怎麼解決虛擬機任然在忙

強制關機或者等待處理
希望可以幫助你

7. Linux下的sleep是睡眠還是忙等佔用CPU資源不

sleep時佔用資源很少,主機斷網,中止正在運行的程序,只有少量的守護進程還在運行,init仍在運行,還有獲取你讓其蘇醒的守護進程,用top或者free都可看百分比

8. Linux 工作隊列和等待隊列的區別

work queue是一種bottom half,中斷處理的後半程,強調的是動態的概念,即work是重點,而queue是其次。
wait queue是一種「任務隊列」,可以把一些進程放在上面睡眠等待某個事件,強調靜態多一些,重點在queue上,即它就是一個queue,這個queue如何調度,什麼時候調度並不重要
等待隊列在內核中有很多用途,尤其適合用於中斷處理,進程同步及定時。這里只說,進程經常必須等待某些事件的發生。例如,等待一個磁碟操作的終止,等待釋放系統資源,或者等待時間經過固定的間隔。
等待隊列實現了在事件上的條件等待,希望等待特定事件的進程把放進合適的等待隊列,並放棄控制權。因此。等待隊列表示一組睡眠的進程,當某一條件為真時,由內核喚醒進程。
等待隊列由循環鏈表實現,其元素包括指向進程描述符的指針。每個等待隊列都有一個等待隊列頭,等待隊列頭是一個類型為wait_queue_head_t的數據結構。
等待隊列鏈表的每個元素代表一個睡眠進程,該進程等待某一事件的發生,描述符地址存放在task欄位中。然而,要喚醒等待隊列中所有的進程有時並不方便。例如,如果兩個或多個進程在等待互斥訪問某一個要釋放的資源,僅喚醒等待隊列中一個才有意義。這個進程佔有資源,而其他進程繼續睡眠可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定義一個新的等待隊列,該宏靜態地聲明和初始化名為name的等待隊列頭變數。 init_waitqueue_head()函數用於初始化已動態分配的wait queue head變數等待隊列可以通過DECLARE_WAITQUEUE()靜態創建,也可以用init_waitqueue_head()動態創建。進程放入等待隊列並設置成不可執行狀態。
工作隊列,workqueue,它允許內核代碼來請求在將來某個時間調用一個函數。用來處理不是很緊急事件的回調方式處理方法.工作隊列的作用就是把工作推後,交由一個內核線程去執行,更直接的說就是寫了一個函數,而現在不想馬上執行它,需要在將來某個時刻去執行,那就得用工作隊列准沒錯。
如果需要用一個可以重新調度的實體來執行下半部處理,也應該使用工作隊列。是唯一能在進程上下文運行的下半部實現的機制。這意味著在需要獲得大量的內存時、在需要獲取信號量時,在需要執行阻塞式的I/O操作時,都會非常有用。

9. linux聲音系統總在等待,怎麼解決

Linux與Windows哪個更合你的味口
贊成Linux的聲音:Linux是免費的,它沒有使用許可證費用;支持Linux的成本比支持Windows(NT4/2000)的成本低得多;而且,已經有許多免費辦公自動化解決方法可供選擇。

贊成Windows的聲音:Linux要求現場的技術支持以保證系統運行,要求開發人員或承包商現場修改系統錯誤和應用核心補丁程序,無法保證能夠由內部人員來解決所有問題;Visual Studio比其它開放源代碼的開發環境好;MS SQL是一個便宜的資料庫平台;Linux 沒有提供足夠多的商業工具軟體。

聲譽

贊成Linux的聲音:Linux 是發展最迅速的OS 平台;Linux 應用能更好地工作;Linux 桌面提供更多選擇;Linux 應用程序和工具的運行很出色,選擇機會也更多。

10. 怎麼設置LINUX系統的開機等待時間

一般grub啟動的話,可做如下修改。
編輯/boot/grub/menu.lst修改

timeout的值,
例如

vi /boot/grub/menu.lst
-----

#boot=/dev/vda
timeout=5

閱讀全文

與LINUX忙則等待相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163