乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      沒有操作系統(tǒng)時,人們是如何操控計(jì)算機(jī)的?

       東耳果果 2019-11-20

      作者:餓得扶墻走

      其實(shí)我覺得樓主問了個非常好的問題,核心就是想知道如果自己動手怎么能寫一個系統(tǒng)讓機(jī)子轉(zhuǎn)起來。我就利用你給的假設(shè)來給你講講計(jì)算機(jī)的歷史,看完也許你就明白了計(jì)算機(jī)操作系統(tǒng)歷史了。

      let's begin!

      首先我們把這臺計(jì)算機(jī)的硬盤拿掉,把主板上的bios芯片拿掉。因?yàn)樽钤缬?jì)算機(jī)運(yùn)行的程序是寫在紙帶上的,當(dāng)紙帶插入后,計(jì)算機(jī)開始從第一句執(zhí)行。我們?yōu)榱俗鞒鲆粋€紙帶,采用以下辦法:

      1.寫一段匯編程序,例如:

      mov cx,100000

      L1:

      mov ax,0

      mov bx,0

      add ax,bx

      inc bx

      loop L1

      這段程序是計(jì)算從0到100000的等差數(shù)列之和,算是科學(xué)計(jì)算吧(什么你說有公式?)

      然后我們把它編譯成二進(jìn)制文件(利用nasm配合參數(shù)即可實(shí)現(xiàn))。現(xiàn)在紙帶上的數(shù)字有了,我們要一個紙帶。

      2.這一步比較神棍,就是為了實(shí)現(xiàn)一個紙帶:我們?nèi)ヒ患抑谱鱞ios芯片的工廠,讓他把我們剛才寫的二進(jìn)制代碼燒錄到一個bios芯片上。在pc接通電源以后,首先cpu要去bios的一個特定地址順序執(zhí)行之后的語句,我們插上這個假的bios芯片,機(jī)器上來就不自檢了,而執(zhí)行我們寫的代碼。

      這就是第一代操作系統(tǒng),由此可見第一代計(jì)算機(jī)根本沒有操作系統(tǒng),人們吧精心編制的二進(jìn)制代碼刻在紙帶上,cpu就開始順序執(zhí)行。

      人們痛恨每次都要裝卸紙帶,尤其是有多個人等候使用計(jì)算機(jī)的時候,所以大家希望把程序事先存儲在某個地方,讓計(jì)算機(jī)自己調(diào)用就好了,于是就有了外存?,F(xiàn)在計(jì)算機(jī)發(fā)展了,所以我們把硬盤和bios都裝上。還是原來的二進(jìn)制代碼,我們把它刻錄在硬盤里(可以先插到一個linux系統(tǒng)里,一個dd命令就實(shí)現(xiàn)了。這里要注意一定要刻錄在硬盤的第一個扇區(qū),而且最后倆字節(jié)一定要是55aa,至于為什么我們不討論,畢竟我們是模擬)。這樣紙帶這種東西就消失在計(jì)算機(jī)的歷史中了。但是你可能會問,這步就是把紙帶換成硬盤了嗎?的確是。

      我們的前輩們也不滿意,他們希望直接想計(jì)算機(jī)傳達(dá)命令。

      繼續(xù)改進(jìn),我們先寫這樣一段代碼:(本來想寫純匯編代碼,但是不能使用int9中斷的話實(shí)在太長,我先寫偽代碼,以后有時間我在完善)

      start:

      如果鍵盤寄存器的值為0

      讀取硬盤第二個扇區(qū)到內(nèi)存地址yyyy

      jmp yyyy

      否則

      funcinput:

      如果鍵盤的寄存器有新的值

      讀取鍵盤的寄存器

      存入到內(nèi)存地址xxxx

      地址xxxx+1

      jmp funcinput

      else 把剛才寫的那一個內(nèi)存塊放入硬盤的第二個扇區(qū)

      jmp start

      (話擦這是什么偽代碼,你大學(xué)在家上的吧)

      把這一段代碼寫在硬盤第一個扇區(qū),以后每次開機(jī)輸入0就運(yùn)行程序,而輸入非0則先錄入程序在執(zhí)行。

      技術(shù)上講,剛才這一小段代碼就已經(jīng)算是一個操作系統(tǒng)了,操作系統(tǒng)只是一個概念,并沒有題主顯得那么復(fù)雜。

      但是到目前為止我們的程序只能一個接一個的完成,如果一個很長的程序后面跟一個很短的,那么對短程序是相當(dāng)不利的,因此前輩們又研究出了多道批處理。

      多道的核心思想就是設(shè)置時間片,每個任務(wù)都運(yùn)行一個時間片,時間片結(jié)束以后,就換到下一個任務(wù),這樣對每個任務(wù)都是公平的。盡管現(xiàn)在的cpu都是雙核四核,但是這個思想到如今依然是家用電腦系統(tǒng)的基石,我們能一邊聽音樂一邊打游戲就是拜這個思想所賜。

      好了現(xiàn)在我們來實(shí)現(xiàn)?,F(xiàn)在我們要給這臺電腦裝一個叫做8583的芯片,他的作用就是每隔一段時間就向cpu發(fā)出一個中斷。而我們的核心代碼就是在收到這個中斷以后執(zhí)行。

      timeInterrupt:

      mov al,20h

      out 20h,al

      mov ax,dataSegment-gdt

      mov ds,ax

      mov eax,1

      cmp eax,[current]

      je .1

      mov [current],eax

      jmp tss1Segment-gdt:0

      jmp .2

      .1:

      mov byte [current],0

      jmp tss0Segment-gdt:0

      .2:

      iret

      (這個是我畢業(yè)設(shè)計(jì)《小型操作系統(tǒng)原理實(shí)現(xiàn)》所用到的實(shí)現(xiàn)時間片的代碼部分,省事就粘過來了)

      這個代碼的核心思想就是接到時鐘中斷以后,保存第一個任務(wù)的現(xiàn)場,恢復(fù)第二個任務(wù)的現(xiàn)場,在跳轉(zhuǎn)到第二個任務(wù))

      多道的實(shí)現(xiàn)不光只是分配時間片那么簡單,因?yàn)槎嗟老到y(tǒng)同時有多個程序在內(nèi)存,而編制程序的時候都是從邏輯地址0開始的,這樣必然會造成地址沖突,于是intel8086推出了段的概念,多道程序中要防止自己編寫的程序由于bug或其他因素破壞掉操作系統(tǒng)程序,于是intel386推出了保護(hù)模式,等等??梢哉f多道是現(xiàn)在操作系統(tǒng)的一大分支。

      到此為止,樓主的問題我基本解答了,首先你覺得沒有操作系統(tǒng)沒法輸入,這是錯的,我們直接插了一塊bios芯片,沒有輸入任何代碼。然后我們修改了“刻”進(jìn)去的代碼,實(shí)現(xiàn)了我們在機(jī)器了編制程序。如今的操作系統(tǒng)也一樣,你第一次給裸機(jī)安裝系統(tǒng)的時候,一定是找了一個刻錄好的媒介(光盤,u盤)。

      以上就是我用代碼幫你模擬了計(jì)算機(jī)操作系統(tǒng)的發(fā)展,看得出題主能從這方面思考問題說明你對計(jì)算機(jī)底層有興趣,這里推薦你基本書:《匯編語言》(王爽的那本)《linux內(nèi)核注釋》(趙炯那本)《匯編語言:從實(shí)模式到保護(hù)模式》《orangs:一個操作系統(tǒng)的實(shí)現(xiàn)》我推薦的這基本都是自己寫內(nèi)核來了解操作系統(tǒng)原理,非常對題主胃口,而非ldd,ldk之類的直接剖析一個操作系統(tǒng)內(nèi)核。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多