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 的處理方面和...