Linux詳解 --- 程式管理

哈哈哈hh發表於2022-01-27

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

程式管理一覽

接下來的幾篇部落格,我將主要按照這個思維導圖的劃分去進行講解。

file

管理

在理解什麼是程式管理之前,我想我們可以先理解一下什麼是管理!
問題:什麼是管理?

管理的過程就是:“先描述,再組織”

  • 也就是用資訊(資料)去構建資料結構的過程
  • 管理者就是對資料結構的管理

【所有事情都可以被分類為:決策 和 執行】

管理的三個角色:

  • 被管理者(學生/軟硬體資源):
  • 執行者(老師/驅動的角色):執行
  • 管理者(校長/作業系統OS) :決策
  • -> 決策的依據是什麼?

資訊(資料)

-> 資訊量太大怎麼辦?

  • 對資訊進行分類,將同類的資料放在一起。
  • 將這些資訊放在一個結構體中。也就是抽象出一個結構體struct
  • 即,這個結構體能夠“描述”一個物件的資訊 [物件導向]

結論:

  • 被管理者和管理者可以不需要直接溝通。
  • 管理者做管理就是對資料進行先描述,再組織。也就是對資料結構進行管理的過程。

程式概念

問題:什麼是程式?我們該如何理解程式?

把程式載入到記憶體後,它就是程式了。 (方便理解,這裡的定義是不準確的)

#換句話說,就是一個程式執行起來後,它就變成了程式。

前面我們提到了,管理就是要先描述再組織,那麼對程式的管理該如何描述和組織呢?

其實在將程式的程式碼和資料載入到記憶體後,OS還會為其建立對應的資料結構-----程式控制塊(process control block).

描述程式 — PCB (程式控制塊)

程式控制塊(PCB)本質就是一個結構體,它裡面儲存著程式的相關資訊。(所以它可以用來描述程式)

在Linux中,程式控制塊的具體名稱是: task_struct

task_struct中所包含的內容

  • 識別符號:pid,它是一個程式的唯一識別符號,每個程式都不一樣
  • 狀態:包含程式狀態、退出碼、退出訊號等
  • 優先順序:相對於其他程式的優先順序
  • 上下文資訊:一個程式在執行的時候,處理器的暫存器中的資料。
  • 時間片:描述一個程式能執行多久
  • 程式計數器:程式中即將被執行的下一條指令的地址
  • I/O狀態資訊:包括顯式I/O請求、分配給程式的I/O裝置和被程式使用的檔案列表等
  • 記賬資訊:包括處理器時間總和、使用的時鐘數總和、時間限制、記賬號等

     我接下來介紹一些task_struct中經常涉及的一些內容:

程式識別符號

  • 程式ID   —> getpid()
  • 父程式ID —> getppid()
     在程式碼中,我們可以呼叫上面的兩個介面去獲取當前程式的pid和ppid。
	包含於<sys/types.h>和<unistd.h>
	pid_t getpid(void);
	pit_t getppid(void);

上下文資訊

在程式切換的時候,當前程式若沒執行結束,則會將CPU中的執行的資訊儲存到上下文資料中。

儲存上下文資訊的目的是為了下一次使用時能恢復到之前的狀態。

簡述程式的切換

在程式被載入到記憶體中時,作業系統會為其建立對應的task_struct結構體用於描述程式的資訊。

由於CPU內部只有一套暫存器,計算時需要將記憶體資料移動到CPU內的暫存器中,形成當前的上下文資料。

當程式被切換時:(被切換的情況:①時間片到了 ②來了更高優先順序的程式,當前程式被搶佔了)

因此在程式切換前,會先儲存上下文資訊。以便於下一次恢復上下文。

程式優先順序

問題:程式優先順序是什麼?

CPU資源分配的先後順序,就是指程式的優先順序。

問題:為什麼要有優先順序?

存在優先順序後,可以把程式執行到指定的CPU上,這樣一來,就可以把不重要的程式安排到某個CPU上,可以極大地改善系統的整體效能。

問題:怎麼設定/修改優先順序?

利用PRI和NI調整優先順序。

PRI與NI

在弄清楚PRI和NI之前,我們先來熟悉一條Linux中的指令!

	ps -l     //檢視當前程式的優先順序方面的資訊(主要用來看優先順序的)    //ps -al 也可以

file
通過這個圖,我們的聚焦點主要集中在我圈出的這幾列。

  • UID:執行者的身份
  • PID:代表該程式的pid(識別符號)
  • PPID:代表該程式的ppid,也就是父程式的pid
  • PRI: 代表這個程式可被執行的優先順序,PRI的值越小代表越早被執行。
  • NI: 代表這個程式的nice值。

優先順序的資料計算與取值範圍:

  • PRI: ps -l所顯示的PRI值是經過計算後的新PRI。 PRI (new) = PRI (old) + nice;這裡的PRI是new
  • NI: nice值的取值範圍是 [-20, 19] 共40個級別,nice值是程式優先順序的修正資料。

優先順序的修改

優先順序的修改都是通過對nice值進行修改,從而間接的修改PRI的值的!
這裡我們要介紹一下top命令了!

	top		#top命令相當於Windows中的工作管理員

概括修改優先順序的流程:

進入top後 —> 按 “r” —> 輸入程式PID —> 再輸入nice值即可修改    //沒許可權要sudo一下

注意: 每次輸入nice值後,都是對基礎 PRI 值進行修改的!!!
      即:每次調整都是從起始值PRI ± nice 值的
我舉個?,

基礎值PRI = 20,那麼輸入nice = 10後。 PRI —》30

在此 基礎上再輸入 nice = -10後。        PRI —》-10

解釋:第二次也是在基礎值PRI = 20的基礎上進行±nice的!!!

本文轉自:https://blog.csdn.net/weixin_51696091/article/details/121711612


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2854220/,如需轉載,請註明出處,否則將追究法律責任。

相關文章