亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

讀核日記(三)

2024-07-26 00:31:38
字體:
來源:轉載
供稿:網友

在linux 中每一個進程都由task_struct 數據結構來定義. task_struct就是我們通常所說的PCB.

她是對進程控制的唯一手段也是最有效的手段.

當我們調用fork() 時, 系統會為我們產生一個task_struct結構.然后從父進程,那里繼承一些數據,

并把新的進程插入到進程樹中, 以待進行進程管理.因此了解task_struct的結構對于我們理解任務

調度(在linux 中任務和進程是同一概念)的關鍵.在進行剖析task_struct的定義之前. 我們先按照

我們的理論推一下它的結構.

1, 進程狀態 ,將紀錄進程在等待,運行,或死鎖

2, 調度信息, 由哪個調度函數調度,怎樣調度等

3, 進程的通訊狀況

4,因為要插入進程樹,必須有聯系父子兄弟的指針, 當然是task_struct型

5,時間信息, 比如計算好執行的時間, 以便cpu 分配

6,標號 ,決定改進程歸屬

7,可以讀寫打開的一些文件信息

8, 進程上下文和內核上下文

9,處理器上下文

10,內存信息

因為每一個PCB都是這樣的, 只有這些結構, 才能滿足一個進程的所有要求.

打開/include/linux/sched.h 找到task_struct 的定義

struct task_struct {

/* these are hardcoded - don't touch */

這里是一些硬件設置對程序原來說是透明的. 其中state 說明了該進程是否可以執行,

還是可中斷等信息. Flage 是進程號, 在調用 fork() 時給出,addr_limit 是區分內核進程

與普通進程在內存存放的位置不同

volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */

unsigned long flags; /* per PRocess flags, defined below */

int sigpending;

mm_segment_t addr_limit; /* thread address space:

0-0xBFFFFFFF for user-thead

0-0xFFFFFFFF for kernel-thread

*/

struct exec_domain *exec_domain;

long need_resched;

 

/* various fields */

count 是 計數器 priorrity 是優先級

long counter;

long priority;

cycles_t avg_slice;

/* SMP and runqueue state */

為多處理機定義的變量.

int has_cpu;

int processor;

int last_processor;

int lock_depth;

/* Lock depth. We can context switch in and out of holding a syscall kernel lock... */

為了在進程樹中排序, 定義的父子,兄弟指針

struct task_struct *next_task, *prev_task;

struct tas74k_struct *next_run, *prev_run;

 

/* task state */

定義可 task 運行的狀態, 以及信號

struct linux_binfmt *binfmt;

int exit_code, exit_signal;

int pdeath_signal; /* The signal sent when the parent dies */

/* 定義可進程的用戶號,用戶組以及進程組*/

unsigned long personality;

int dumpable:1;

int did_exec:1;

pid_t pid;

pid_t pgrp;

pid_t tty_old_pgrp;

pid_t session;

/* boolean value for session group leader */

是不是進程組的頭文件

int leader;

/*

* pointers to (original) parent process, youngest child, younger sibling,

* older sibling, respectively. (p->father can be replaced with

* p->p_PPTr->pid)

*/

父子進程的一些指針

struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr;

 

/* PID hash table linkage. */

在調度中用的一些hash 表

struct task_struct *pidhash_next;

struct task_struct **pidhash_pprev;

 

/* Pointer to task[] array linkage. */

struct task_struct **tarray_ptr;

 

struct wait_queue *wait_chldexit; /* for wait4() 等待隊列 */

struct semaphore *vfork_sem; /* for vfork() */

unsigned long policy, rt_priority;

unsigned long it_real_value, it_prof_value, it_virt_value;

進程的性質因為實時進程與普通進程的調度算法不一樣所以應有變量區分

下面是進程的一些時間信息

unsigned long it_real_incr, it_prof_incr, it_virt_incr;

struct timer_list real_timer;

struct tms times;

unsigned long start_time;

long per_cpu_utime[NR_CPUS], per_cpu_stime[NR_CPUS];定義了時間片的大小

/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */

內存信息

unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;

int swappable:1;

/* process credentials */

uid_t uid,euid,suid,fsuid;

gid_t gid,egid,sgid,fsgid;

int ngroups;

gid_t groups[NGROUPS];

kernel_cap_t cap_effective, cap_inheritable, cap_permitted;

struct user_struct *user;

以下英文注釋很清楚

/* limits */

struct rlimit rlim[RLIM_NLIMITS];

unsigned short used_math;

char comm[16];

/* file system info */

int link_count;

struct tty_struct *tty; /* NULL if no tty */

/* ipc stuff */

 

struct sem_undo *semundo;

struct sem_queue *semsleeping;

/* tss for this task */

struct thread_struct tss;

/* filesystem information */

struct fs_struct *fs;

/* open file information */

struct files_struct *files;

/* memory management info */

struct mm_struct *mm;

 

/* signal handlers */

spinlock_t sigmask_lock; /* Protects signal and blocked */

struct signal_struct *sig;

sigset_t signal, blocked;

struct signal_queue *sigqueue, **sigqueue_tail;

unsigned long sas_ss_sp;

size_t sas_ss_size;

};

在分析完 這個結構之后, 還有很多問題要想, 也許不能讀 但框架要搞好.需要向的問題有以下幾個

1,在task_struct 中用的常量在那里定義呢, 如最大進程個數, 最多支持的cpu 個數,等等

2,在調用fork() 時, 系統是分配一塊內存 會是這樣么

malloc(1,sizeof(struct task_struck))

拷貝一些變量,還是和服進程公用一部分內存.malloc 函數怎么實現(在內存管理那一部分,但此處我認為不能不想)

3,.對于線程來說, 又如何實現呢?

4, 調度策略函數 schedul()

有幾種形勢, 時間片輪轉, 搶占式,優先級搶占式, 多級反饋制.除了時間片輪轉外都要對進程樹進行遍歷,(對于實時進程

的fifo機制不用)linux 是怎樣保證了高效呢?如果把最大線成數修改, 效率會不會降低

5, 進程通訊用到的管道,信號結構如何

待續..


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品嫩草影院久久久| 日韩毛片在线观看| 91免费在线视频网站| 午夜欧美不卡精品aaaaa| 一本大道亚洲视频| 色哟哟入口国产精品| 91久久久国产精品| 久久久成人精品| 亚洲一级黄色片| 亚洲精品美女久久| 成人免费视频在线观看超级碰| 一区国产精品视频| 一区二区亚洲欧洲国产日韩| 欧美野外wwwxxx| 精品国产网站地址| 国产精品香蕉国产| 欧美精品一区二区三区国产精品| 国产高清视频一区三区| 日韩美女在线观看一区| 国产精品美女久久久免费| 久久av红桃一区二区小说| 97福利一区二区| 国产精品成人免费电影| 久久精品成人欧美大片古装| 久久精品久久久久久国产 免费| 91系列在线观看| 国产亚洲精品综合一区91| 国产成人avxxxxx在线看| 成人网址在线观看| 国内精品久久久| 伊人伊人伊人久久| 欧美亚洲成人xxx| 久久精品视频99| 欧美一区二区色| 亚洲国产小视频| 中文日韩在线观看| 国产日韩av在线| 黄色成人av网| 国产有码在线一区二区视频| 国产免费一区二区三区香蕉精| 日韩精品免费在线视频观看| 亚洲色图国产精品| 中文字幕自拍vr一区二区三区| 日韩欧美在线第一页| 97成人在线视频| 亚洲黄色在线看| 久久香蕉国产线看观看网| 亚洲欧美一区二区三区在线| 久久精品国产亚洲7777| 中文字幕精品一区二区精品| 久久久久久久影视| 成年无码av片在线| 2021国产精品视频| 亚洲欧美日韩天堂| 欧美不卡视频一区发布| 精品久久久久国产| 久久婷婷国产麻豆91天堂| 久久综合国产精品台湾中文娱乐网| 黄网站色欧美视频| 欧美在线视频网站| 国内精品久久久久久久久| 亚洲欧美在线x视频| 中国人与牲禽动交精品| 91中文在线观看| 日韩精品免费在线播放| 韩国欧美亚洲国产| 最近2019免费中文字幕视频三| 亚洲人成自拍网站| 国产精品国产三级国产专播精品人| 久久久成人的性感天堂| 狠狠色狠狠色综合日日小说| 成人av.网址在线网站| 国产精品高潮呻吟久久av无限| 亚洲夜晚福利在线观看| 日本老师69xxx| 欧美激情伊人电影| 精品久久久久久久久久国产| 欧美日韩国产在线看| 7m精品福利视频导航| 欧美区在线播放| 国产成人久久久精品一区| 亚洲国产欧美一区二区三区同亚洲| www.久久久久久.com| 97成人精品视频在线观看| 久久男人的天堂| 国产欧美一区二区三区视频| 欧美中文在线观看国产| 中文字幕在线成人| 欧美日本高清视频| 国产精品久久久久aaaa九色| 欧美另类精品xxxx孕妇| 日本亚洲精品在线观看| 国产极品精品在线观看| 日韩在线观看免费全集电视剧网站| www国产91| 成人夜晚看av| 久久免费国产精品1| 日韩欧美在线视频日韩欧美在线视频| 国产精品一区二区久久精品| 精品人伦一区二区三区蜜桃免费| 亚洲香蕉伊综合在人在线视看| 欧美尤物巨大精品爽| 国产精品久久久久久久久久尿| 欧美理论电影网| 国产精品午夜国产小视频| 亚洲国产精品视频在线观看| 久久九九亚洲综合| 成人激情视频免费在线| 久久福利视频导航| 欲色天天网综合久久| 韩国日本不卡在线| 国产精品久久久久久久久| 国产一区二区激情| 国产精品久久国产精品99gif| 久久久久这里只有精品| 欧美性生活大片免费观看网址| 国产精品九九九| 国产精品久久91| 国产精品久久久久久久电影| 亚洲国产精品悠悠久久琪琪| 狠狠色狠狠色综合日日五| 久久综合免费视频影院| 亚洲视频在线观看免费| 91青草视频久久| 狠狠躁18三区二区一区| 丰满岳妇乱一区二区三区| 蜜臀久久99精品久久久无需会员| 欧美伊久线香蕉线新在线| 日韩高清免费在线| 久久久久久久久国产精品| 欧美午夜性色大片在线观看| 国产一区二区欧美日韩| 国产精品永久免费观看| 中文字幕亚洲欧美日韩2019| 精品亚洲夜色av98在线观看| 成人性生交xxxxx网站| 91丨九色丨国产在线| 一本色道久久88综合日韩精品| 亚洲色图17p| 亚洲国产另类久久精品| 欧美中文字幕视频| 成人444kkkk在线观看| 亚洲欧美日韩一区二区在线| 欧美高清在线视频观看不卡| 亚洲字幕一区二区| 成人性生交大片免费观看嘿嘿视频| 日韩av网站大全| 啪一啪鲁一鲁2019在线视频| 欧美专区第一页| 中文字幕日韩欧美在线| 欧美精品电影免费在线观看| 久久99热精品| 成人免费看吃奶视频网站| 欧美国产高跟鞋裸体秀xxxhd| 97国产精品视频人人做人人爱| 国内精品一区二区三区四区| 欧美亚洲一区在线| 性欧美长视频免费观看不卡| 亚洲第一福利网站| 国产精品自产拍高潮在线观看| 国产精品高潮呻吟视频| 欧美一级淫片aaaaaaa视频| 亚洲日本成人女熟在线观看| 欧美疯狂性受xxxxx另类|