亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
123下一頁(yè)
最近訪問板塊 發(fā)新帖
查看: 8164 | 回復(fù): 22
打印 上一主題 下一主題

bootsect啟動(dòng)時(shí),為何要把自己搬到0x9000呢? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-01-27 19:36 |只看該作者 |倒序?yàn)g覽
如題,初學(xué)源碼,看0.11源碼注釋的時(shí)候遇到的問題,找了幾本書,沒有看到答案……
bootsect之后的作用好像僅僅是509那兩個(gè)字節(jié)吧……

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-01-31 19:32 |只看該作者
bootsect.s開頭有一段注釋
  16! NOTE! currently system is at most 8*65536 bytes long. This should be no
  17! problem, even in the future. I want to keep it simple. This 512 kB
  18! kernel size should be enough, especially as this doesn't contain the
  19! buffer cache as in minix
最后提到了與minix比較
估計(jì)當(dāng)時(shí)Linus參考minix進(jìn)行開發(fā),受到minix的影響吧
可以找一下《操作系統(tǒng) 設(shè)計(jì)與實(shí)現(xiàn)》這本書翻一下,書中有沒有講就不清楚了
或者看一下早期minix啟動(dòng)部分源碼看一下又沒有注釋

個(gè)人感覺這是根據(jù)早期內(nèi)核大小設(shè)置了一個(gè)值
你可以這么想,你自己寫一個(gè)系統(tǒng),通過控制它的內(nèi)存使用,只要保證系統(tǒng)不被破壞,
具體搬到什么地方以及是否搬移都可以由你來控制

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-01-31 21:22 |只看該作者
終于有個(gè)人回答了……感動(dòng)……
我就是覺得有點(diǎn)奇怪,按理說LInux這么優(yōu)秀的操作系統(tǒng),盡管是0.11,也不應(yīng)該出現(xiàn)多此一舉的事情才對(duì)……
可是實(shí)在看不出原因……還是去看看你說的書吧……謝謝~

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-01-31 21:32 |只看該作者
POST后調(diào)用int 19h 將 MBR 加載到 0x7c00 這是 x86 體系決定,
MBR 又加載 bootsect 到令一個(gè)地方進(jìn)行解壓或什么的,如又加到 0x7c00 或 0x6000 或 0x20000 或其它,這些工作都是前期的,一般操作系統(tǒng)都這么做。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-01-31 21:38 |只看該作者
原帖由 mik 于 2009-1-31 21:32 發(fā)表
POST后調(diào)用int 19h 將 MBR 加載到 0x7c00 這是 x86 體系決定,
MBR 又加載 bootsect 到令一個(gè)地方進(jìn)行解壓或什么的,如又加到 0x7c00 或 0x6000 或 0x20000 或其它,這些工作都是前期的,一般操作系統(tǒng)都這么做。

呃,我想問的是這么做的意義……直接在0x7c00運(yùn)行不好么?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-01-31 21:44 |只看該作者
原帖由 jjj137 于 2009-1-31 21:38 發(fā)表

呃,我想問的是這么做的意義……直接在0x7c00運(yùn)行不好么?

0x7c00是 bios 加載的,
理論上可以加載到任何地方執(zhí)行。

但是,一個(gè)OS不是簡(jiǎn)單的某一塊數(shù)據(jù),有N多的數(shù)據(jù)要加載,需要加載多次,總得另找個(gè)地方放吧

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-01-31 22:16 |只看該作者
原帖由 mik 于 2009-1-31 21:44 發(fā)表

0x7c00是 bios 加載的,
理論上可以加載到任何地方執(zhí)行。

但是,一個(gè)OS不是簡(jiǎn)單的某一塊數(shù)據(jù),有N多的數(shù)據(jù)要加載,需要加載多次,總得另找個(gè)地方放吧

我的意思是直接加載下一個(gè)模塊setup不行么?畢竟bootsect已經(jīng)在0x7c00了,可以直接運(yùn)行。不復(fù)制bootsect不是可以減少出錯(cuò)的幾率么?對(duì)于實(shí)模式來說,操作應(yīng)該越少越好吧……

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-01-31 22:36 |只看該作者
原帖由 jjj137 于 2009-1-31 22:16 發(fā)表

我的意思是直接加載下一個(gè)模塊setup不行么?畢竟bootsect已經(jīng)在0x7c00了,可以直接運(yùn)行。不復(fù)制bootsect不是可以減少出錯(cuò)的幾率么?對(duì)于實(shí)模式來說,操作應(yīng)該越少越好吧……


0x7c00 被加載進(jìn)去的是 MBR,linux 的 0x7c00 我沒看過是怎樣的,

windows vista 的 0x7c00 區(qū)域我倒是略為看過。

int 19h 把磁盤的 MBR 加載到 0x7c00(不是 bootsect),轉(zhuǎn)到 0x7c00,然后搬到 0x6000 繼續(xù)執(zhí)行

MBR 的主要任務(wù)的,檢查磁盤4個(gè)主分區(qū),發(fā)現(xiàn)第1個(gè)可啟動(dòng)分區(qū)時(shí),將這個(gè)分區(qū)的 bootsect 重新加載到 0x7c00 再執(zhí)行,這時(shí)候才是加載的分區(qū)的 bootsect。





貼一段 vista 安裝的 MBR,如下:

00007c00:        xor ax, ax
00007c02:        mov ss, ax
00007c04:        mov sp, 0x7c00
00007c07:        mov es, ax
00007c09:        mov ds, ax
00007c0b:        mov si, 0x7c00
00007c0e:        mov di, 0x0600
00007c11:        mov cx, 0x0200
00007c14:        cld
00007c15:        rep movsb byte ptr es:[di], byte ptr ds:[si]     /* 搬到 0x6000, 長(zhǎng)度 512 字節(jié) */
00007c17:        push ax
00007c18:        push 0x061c
00007c1b:        retf
00007c1c:        sti
00007c1d:        mov cx, 0x04
00007c20:        mov bp, 0x07be
00007c23:        cmp byte ptr ss:[bp], 0x00             /* 檢查引導(dǎo)標(biāo)志,是否為 0x80,可啟動(dòng)標(biāo)志 */
00007c27:        jl .+0x0b       (0x00007c34)
00007c29:         jnz .+0x0110  (0x00007d3d)
00007c2d:        add bp, 0x10
00007c30:        loop .+0xfff1
00007c32:        int 0x18
00007c34:        mov byte ptr ss:[bp], dl             /* dl = 0x80, 寫引導(dǎo)標(biāo)志為 0x80 */
00007c37:        push bp
00007c38:        mov byte ptr ss:[bp+0x11], 0x05      /* 寫第2個(gè)分區(qū)表*/
00007c3c:        mov byte ptr ss:[bp+0x10], 0x00      /* 寫第2個(gè)分區(qū)表*/
00007c40:        mov ah, 0x41
00007c42:        mov bx, 0x55aa                    
00007c45:        int 0x13                            /* 檢查擴(kuò)展功能是否存在 */
00007c47:        pop bp
00007c48:        jb .+0x000f                         /* 假如出錯(cuò) */
00007c4a:        cmp bx, 0xaa55
00007c4e:        jnz .+0x0009
00007c50:        test cx, 0x01
00007c54:        jz .+0x03
00007c56:        inc byte ptr ss:[bp+0x10]
00007c59:        pushad
00007c5b:        cmp byte ptr ss:[bp+0x10], 0x00
00007c5f:                        jz .+0x26
00007c61:        push 0x00
00007c67:        push dword ptr ss:[bp+0x08]
00007c6b:        push 0x00
00007c6e:        push 0x7c00
00007c71:        push 0x01
00007c74:        push 0x10
00007c77:        mov ah, 0x42
00007c79:        mov dl, byte ptr ss:[bp]
00007c7c:        mov si, sp
00007c7e:        int 0x13
00007c80:        lahf
00007c81:        add sp, 0x10
00007c84:        sahf
00007c85:        jmp .+0x14
00007c87:        mov ax, 0x0201
00007c8a:        mov bx, 0x7c00
00007c8d:        mov dl, byte ptr ss:[bp]
00007c90:        mov dh, byte ptr ss:[bp+0x01]
00007c93:        mov cl, byte ptr ss:[bp+0x02]
00007c96:        mov ch, byte ptr ss:[bp+0x03]
00007c99:        int 0x13                 /* 讀進(jìn)第1個(gè)分區(qū) */

... ...

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-01-31 22:39 |只看該作者
……看來咱們說的是兩回事……我問的不是MBR……

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-01-31 22:44 |只看該作者
哦哦,終于找到了,原來是為了setup.S將參數(shù)表保存到那里而預(yù)留空間……
PS:發(fā)現(xiàn)我Google搜索任意關(guān)鍵字全被歸為惡意網(wǎng)站……

[ 本帖最后由 jjj137 于 2009-1-31 22:47 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP