日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实验1 熟悉实验环境

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验1 熟悉实验环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本操作系統實驗的硬件環境是IA-32(x86)架構的PC機(就是你現在正在使用的計算機),主要軟件環境是Bochs + gcc + 你最喜歡的編輯器/IDE + 你最喜歡的操作系統 + Linux 0.11源代碼。實驗的基本流程是根據實驗要求編寫應用程序、修改Linux 0.11的源代碼,用gcc編譯后,在Bochs的虛擬環境中運行、調試目標代碼。

上述實驗環境涉及到的軟件都是免費且開源的,具有較強的可移植性,可以在多種計算機的多種操作系統上搭建。為方便實驗者,我們在最常見的平臺Ubuntu(最流行的GNU/Linux發行版之一)——上制作了hit-oslab集成環境,它基本包含了實驗所需的所有軟件,安裝過程非常簡單,基本上是直接解壓就可以使用。

主要平臺和工具簡介

x86模擬器Bochs

Bochs是一個免費且開放源代碼的IA-32(x86)架構PC機模擬器。在它模擬出的環境中可以運行Linux、DOS和各種版本的Windows等多種操作系統。而Bochs本身具有很高的移植性,可以運行在多種軟硬件平臺之上,這也是我們選擇它做為本書的指定模擬器的主要原因。如果您想擁抱自由的Linux,那么Bochs幾乎是您的不二選擇。如果您想繼續把自己綁定在Windows平臺上,那么除了Bochs,您還可以選用VMware或者Microsoft Virtual PC。它們是最著名虛擬機軟件,而且都可以免費使用。因為Bochs的是模擬器,其原理決定了它的運行效率會低于虛擬機。但對于本書所設計的實驗來說,效率上的差別很不明顯。而且,Bochs有虛擬機無可比擬的調試操作系統的能力,所以我們更建議您選用Bochs。hit-oslab已經內置了bochs,本實驗后文假定的缺省環境也是Bochs。

關于Bochs的更詳細的介紹請訪問它的主頁及Bochs使用手冊。

GCC編譯器

GCC是和Linux一起成長起來的編譯器。Linux最初的版本就是由GCC編譯的。現在GCC也是在自由軟件領域應用最廣泛的編譯器。所以,我們也選擇GCC做為本書實驗的指定編譯器。

DB調試器

GDB調試器是GCC編譯器的兄弟。做為自由軟件領域幾乎是唯一的調試器,它秉承了*nix類操作系統的一貫風格,采用純命令行操作,有點兒類似dos下的debug。關于它的使用方法請看GDB使用手冊。

Ubuntu (GNU/Linux)

Ubuntu也許不是目前最好用的Linux桌面發行版,但它一定是最流行的。主要特點是易用,非常的易用。

現在,已經有越來越多的人開始用Ubuntu完全代替Windows,享受更加自由、安全、守法的感覺。Ubuntu的主頁是http://www.ubuntu.com/?,這里不僅可以免費下載到iso文件,甚至能免費申領Ubuntu的安裝光盤。

我們強烈建議您在Ubuntu下做實驗。因為有些實驗內容涉及到在自己改進的Linux 0.11下,運行自己編的應用程序。被改進的功能都是高版本Linux內核已經具有的,在其上確認自己編寫的應用程序無誤后,再用之測試自己改進的Linux 0.11,可以更有信心些。

實驗環境的工作模式

hit-oslab實驗環境簡稱oslab,是一個壓縮文件(hit-oslab-linux-20110823.tar.gz),這個文件已經下載到了/home/teacher目錄和/home/shiyanlou/oslab(大家一進入實驗環境,就是點擊左邊的terminal打開終端以后,所在的目錄就是/home/shiyanlou,這是大家的主目錄)下,大家可以將這個文件拷貝到自己的實驗工作目錄下,用tar zxvf hit-oslab-linux-20110823.tar.gz命令解壓展開即可工作。oslab工作在一個宿主操作系統之上,我們使用的Linux,在宿主操作系統之上完成對Linux 0.11的開發、修改和編譯之后,在linux-0.11目錄下會生產一個名為Image的文件,它就是編譯之后的目標文件。該文件內已經包含引導和所有內核的二進制代碼。如果拿來一張軟盤,從它的0扇區開始,逐字節寫入Image文件的內容,就可以用這張軟盤啟動一臺真正的計算機,并進入Linux 0.11內核。oslab采用bochs模擬器加載這個Image文件,模擬執行Linux 0.11,這樣省卻了重新啟動計算機的麻煩。

bochs目錄下是與bochs相關的執行文件、數據文件和配置文件。run是運行bochs的腳本命令。運行后bochs會自動在它的虛擬軟驅A和虛擬硬盤上各掛載一個鏡像文件,軟驅上掛載是linux-0.11/Image,硬盤上掛載的是hdc-0.11.img。因為bochs配置文件中的設置是從軟驅A啟動,所以Linux 0.11會被自動加載。而Linux 0.11會驅動硬盤,并mount硬盤上的文件系統,也就是將hdc-0.11.img內鏡像的文件系統掛載到0.11系統內的根目錄——“/”。在0.11下訪問文件系統,訪問的就是hdc-0.11.img文件內虛擬的文件系統。

hdc-0.11.img文件的格式是Minix文件系統的鏡像。Linux所有版本都支持這種格式的文件系統,所以可以直接在宿主Linux上通過mount命令訪問此文件內的文件,達到宿主系統和bochs內運行的Linux 0.11之間交換文件的效果。Windows下目前沒有(或者是還沒發現)直接訪問Minix文件系統的辦法,所以要借助于fdb.img,這是一個1.44M軟盤的鏡像文件,內部是FAT12文件系統。將它掛載到bochs的軟驅B,就可以在0.11中訪問它。而通過filedisk或者WinImage,可以在Windows下訪問它內部的文件。

hdc-0.11.img內包含有:

  • Bash shell
  • 一些基本的Linux命令、工具,比如cp、rm、mv、tar。
  • vi編輯器
  • gcc 1.4編譯器,可用來編譯標準C程序
  • as86和ld86
  • Linux 0.11的源代碼,可在0.11下編譯,然后覆蓋現有的二進制內核

使用方法

  • 準備活動

$ cd ~/oslab

把當前目錄切換到oslab下,用pwd命令確認,用“ls -l”列目錄內容。本實驗的所有內容都在本目錄或其下級目錄內完成。

  • 編譯內核

“編譯內核”比“編寫內核”要簡單得多。首先要進入linux-0.11目錄,然后執行:

$ make all

因為“all”是最常用的參數,所以可以省略,只用“make”,效果一樣。

在多處理器的系統上,可以用-j參數進行并行編譯,加快速度。例如雙CPU的系統可以:

$ make -j 2

make命令會顯示很多很多很多的信息,你可以盡量去看懂,也可以裝作沒看見。只要最后幾行中沒有“error”就說明編譯成功。最后生成的目標文件是一個軟盤鏡像文件——linux-0.11/Image。如果將此鏡像文件寫到一張1.44MB的軟盤上,就可以啟動一臺真正的計算機。

linux-0.11目錄下是全部的源代碼,很多實驗內容都是要靠修改這些代碼來完成。修改后需要重新編譯內核,還是執行命令:

$ make all

make命令會自動跳過未被修改的文件,鏈接時直接使用上次編譯生成的目標文件,從而節約編譯時間。但如果重新編譯后,你的修改貌似沒有生效,可以試試先“make clean”,再“make all”。“make clean”是刪除上一次編譯生成的所有中間文件和目標文件,確保是在全新的狀態下編譯整個工程。

  • 運行和調試

在Bochs中運行最新編譯好的內核很簡單,在oslab目錄下執行:

$ ./run

如果出現Bochs的窗口,里面顯示linux的引導過程,最后停止在“[/usr/root/]#”,表示運行成功,如下圖所示。

圖1 用Bochs啟動Linux 0.11以后的樣子

內核調試分為兩種模式:匯編級調試和C語言級調試。

匯編級調試需要執行命令:

$ ./dbg-asm

可以用命令help來查看調試系統用的基本命令。更詳細的信息請查閱Bochs使用手冊。

C語言級調試稍微復雜一些。首先執行如下命令:

$ ./dbg-c

然后再打開一個終端窗口,進入oslab目錄后,執行:

$ ./rungdb

新終端窗口中運行的是GDB調試器。關于gdb調試器請查閱GDB使用手冊。

  • Ubuntu和Linux 0.11之間的文件交換

oslab下的hdc-0.11-new.img是0.11內核啟動后的根文件系統鏡像文件,相當于在bochs虛擬機里裝載的硬盤。在Ubuntu上訪問其內容的方法是(大家使用sudo時,password是shiyanlou):

$ sudo ./mount-hdc

之后,hdc目錄下就是和0.11內核一模一樣的文件系統了,可以讀寫任何文件(可能有些文件要用sudo才能訪問)。讀寫完畢,不要忘了卸載這個文件系統:

$ sudo umount hdc

經過sudo ./mount-hdc這樣處理以后,我們可以在Ubuntu的hdc目錄下創建一個xxx.c文件,然后利用Ubuntu上的編輯工具(如gedit等)實現對xxx.c文件的編輯工作,在編輯保存以后。執行sudo umount hdc后,再進入Linux 0.11(即run啟動bochs以后)就會看到這個xxx.c(即如下圖所示),這樣就避免了在Linux 0.11上進行編輯xxx.c的麻煩,因為Linux 0.11作為一個很小的操作系統,其上的編輯工具只有vi,使用起來非常不便。

圖2 用Ubuntu和Linux 0.11完成文件交換以后再啟動Linux 0.11以后

另外在Linux 0.11上產生的文件,如后面實驗中產生的process.log文件,可以按這種方式”拿到“Ubuntu下用python程序進行處理,當然這個python程序在Linux 0.11上顯然是不好使的,因為Linux 0.11上搭建不了python解釋環境。

注意1:不要在0.11內核運行的時候mount鏡像文件,否則可能會損壞文件系統。同理,也不要在已經mount的時候運行0.11內核。

注意2:在關閉Bochs之前,需要先在0.11的命令行運行“sync”,確保所有緩存數據都存盤后,再關閉Bochs。即#sync,在內存中尚未更新的的數據會寫入硬盤中。當然正常情況下,關閉系統時會自動進行內存數據于硬盤數據的同步檢測,保證硬盤數據在關閉系統時是最新的


=========================實驗報告===============================

一,怎樣在自己的電腦上搭建實驗環境?

a) vm+ubuntu-12.04.1-桌面64,32位版.iso,14.04LTS也可以【測試了目前最多的Ubuntu16.04本方法不可用,sudo ./run14后Linux0.11出現死機現象,懶得去調試了,畢竟要快速進入實驗環境才是目的】;

b) 登錄https://github.com/DeathKing/hit-oslab,按照這上面的步驟,步驟如下;

c)?

git clone https://github.com/DeathKing/hit-oslab.git ~/hit-oslab cd ~/hit-oslab ./setup.sh

至于完全離線版的安裝等回國頭來再研究;

d)如果make,make clean出錯(12.04不用root),./run要前加上sudo,即賦予root權限去做就可解決;

二,Bochs是什么?

Bochs是一個x86硬件平臺的開源模擬器。它可以模擬各種硬件的配置。Bochs模擬的是整個PC平臺,包括I/O設備、內存和BIOS。更為有趣的是,甚至可以不使用PC硬件來運行Bochs。事實上,它可以在任何編譯運行Bochs的平臺上模擬x86硬件。通過改變配置,可以指定使用的CPU(386、486或者586),以及內存大小等。一句話,Bochs是電腦里的“PC”。根據需要,Bochs還可以模擬多臺PC,此外,它甚至還有自己的電源按鈕。

現在不用深究它是什么,等實驗做完后會明白的,現在只需有個概念:“oslab采用bochs模擬器加載這個Image文件,模擬執行Linux 0.11,這樣省卻了重新啟動計算機的麻煩。”


三,mount是什么?

From Wikipedia, the free encyclopedia

Before a user can access a file on a Unix-like machine, the file system that contains it needs to be mounted with the mount command. Frequently mount is used for SD card, USB storage, DVD and other removable storage devices.

The mount command instructs the operating system that a file system is ready to use, and associates it with a particular point in the overall file system hierarchy (its mount point) and sets options relating to its access. Mounting makes file systems, files, directories, devices and special files available for use and available to the user. Its counterpart umount instructs the operating system that the file system should be disassociated from its mount point, making it no longer accessible and may be removed from the computer. It is important to umount a device before removing it since changes to files may have only partially been written and are completed as part of the umount.

The mount and umount commands require root user privilege to effect changes. Alternately, specific privileges to perform the corresponding action may have been previously granted by the root user. A file system can be defined as user mountable in the /etc/fstab file by the root user.

這個過程并不神秘,簡單的說就是把一個文件映射到一個目錄下的過程,windows下把你的USB盤插到電腦上,電腦上立即多出了一個F:盤之類的東西,這個即插即用的過程其實是mount程序在你的U盤和F:之間建立了一個聯系,F:可以理解為掛載點,當我們使用完U盤后,并不是立即拔掉,而是先操作“彈出F:”這樣的一個東西,然后再拔出U盤,在你點擊“彈出F:”后會啟動umount程序斷開U盤和掛載點的聯系,這樣做是安全的。

四,Ubuntu和Linux 0.11之間的文件交換?

a)?$ sudo ./mount-hdc ?#這一步相當于把Linux0.11的文件的硬盤取下來插在本機電腦上

b) 在本機中操作,在hdc文件夾中創建文件?touch llll.txt

c) 把hdc從本機中umount

d)啟動./run如下圖:









創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的实验1 熟悉实验环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。