Linux初次學習

2021-04-12 18:55:20 字數 1339 閱讀 2909

1   :#define first_tss_entry  4

2:   #define first_ldt_entry (first_tss_entry + 1)

3:    #define _tss(n) ( ( (unsigned long n) << 4 ) + (first_tss_entry << 3))

4:    #define _ldt(n) ( ( (unsigned long n) << 4 ) + (first_ldt_entry << 3))

5:    #define ltr(n) _ _a**_ _("ltr %%ax": :"a"(_tss(n)))

6:    #define lldt(n) __a**__("lldt %%ax"::"a"(_ldt(n)))

上面4的意思是說以0開始的每個代表8位元組的第4位

first_tss_entry << 3

第1個任務的tss相對於第0個任務的偏移了2個8位元組 所以就移動了16個位元組

即 ((unsigned long n) << 4

第n個任務 tr ldtr載入就是他們的偏移的位元組數

tss在**呢? 在struct task_struct裡面的分量struct tss_struct tss中

ldt在**呢?    也在struct task_struct裡面分量struct desc_struct ldt[3]中

哪gdt如何管理tss和ldt呢

struct tss_struct 和struct desc_struct都在核心中 所以通過32的偏移位址就可以找到他們

他們有什麼屬性呢?也就是許可權問題

所以gdt中就必須設定好他們的位置和許可權

**如下:

#define _set_tssldt_desc(n, addr, type)/

__a**__("movw $104, %1/n/t"/

"movw %%ax,  %2/n/t"/

"rorl $16, %%eax/n/t"/

"movb %%al, %3/n/t"/

"movb $" type ", %4/n/t"/

"movb $0x00, %5/n/t"/

"movb %%ah, %6/n/t"/

"rorl $16, %%eax"/

: :"a"(addr),  "m"(* (n)),  "m" (*(n + 2)), "m"(* (n + 4)),/

"m"(*(n + 5)), "m"(*(n + 6),"m"(*(n + 7)/

其他idt也是同樣的道理

我學linux是因為我對windows的無知~~~~

但學習的過程很多東西都搞的頭好痛

Linux初次學習

linux與windows的區別?作業系統windows linux macos 1 linux免費的 windows收費 2 linux主要用在伺服器 windows主要用在pc端 linux伺服器版本費用要比windows低,病毒比較少 3 linux支援遊戲少 windows遊戲很少 4 手機...

Linux 初次體驗

關於linux已經聽聞很久的大名了,但是一直沒有機會來使用,這次趁著放假的機會,來體驗一把linux吧。之前使用visuabox和ubuntu16,但是虛擬機器總是不能連線網際網路,在虛擬機器上面無法上網,很是頭疼,各種橋接網路配置了一天,還是不行,小白的無奈啊。後來無奈,換了vmware和ubun...

Karrigell 初次學習

今天按照 http karrigell.sourceforge.net en front.htm 教程,一口氣學完了 karrigell 的入門內容,一邊看一邊試驗完了所有的基本功能。感覺很興奮。這個框架可謂是麻雀雖小,五臟俱全。而且語法直觀,使用也非常的靈活。另外,在 unicode 的處理方面和...