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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nachos中文教程java_Nachos3.4系列-2 Makefile 与Nachos中文教程 【转】

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nachos中文教程java_Nachos3.4系列-2 Makefile 与Nachos中文教程 【转】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文轉(zhuǎn)自http://blog.sina.com.cn/s/blog_a2dded3d010195hf.html

Nachos系列免責說明:本系列博客所用Nachos源代碼及文檔均來自互聯(lián)網(wǎng),如有侵權(quán),請私信,馬上刪除。此外,Nachos為高校操作系統(tǒng)實習課程所用,本系列博客只為讀者提供思路,以避免浪費不必要的時間,這是博主寫這個系列的初衷所在。如果出現(xiàn)作業(yè)抄襲現(xiàn)象,博主一概不負責,希望讀者實事求是,自己思考!

第一部分 Makefile簡介

Linux--Makefile簡介下載:http://pan.baidu.com/share/link?shareid=850895810&uk=2822100601

很多window的程序員都不知道m(xù)akefile這個東東,因為現(xiàn)在主流的IDE都把編譯工作自動化完成了,但是作為一個敢于挑戰(zhàn)自己工程能力的人,makefile還是要懂。

Makefile類似與一個shell腳本,里面定義了如何編譯眾多的頭文件,源文件。一旦寫好,整個工程自動編譯,極大提高了開發(fā)效率。大多數(shù)IDE都有類似的命令,如Delphi的make,Visual C++的nmake和Linux GUN的gmake。

1.回憶一下上一篇博客的cd到nachos/code目錄下的make,我們應該是執(zhí)行了nachos/code下的Makefile,打開此Makefile:

開頭的MAKE=gmake是說,以后的gmake都可以用$(MAKE)代替,這樣做的好處是跨平臺很方便,應為只需要把MAKE=nmake就可以方便移植到visual 平臺,對于程序規(guī)范化書寫,向伯克利那幫大佬們致敬!

接下來的all:是要執(zhí)行的所有make,我們可以看到執(zhí)行該make之后其實是對每個代碼包里面的.cc或者.h文件里面都做makefile,其中相應的makefile寫在相應的代碼包中。以Threads為例,code/threads包下面也有makefile,那個makefile才執(zhí)行了編譯code/threads包下面.cc(.h)的操作。在以后的編程中,比如我們只修改了threads代碼包下面的.cc或者.h文件,我們就可以直接cd到threads/下面執(zhí)行make,而不用把整個工程編譯。

可能你會覺得奇怪,為什么要寫$(MAKE) nachos和$(MAKE) depend兩次呢,這是因為在Makefile.common文件中,既有nachos:(其中$(PROGRAM)的值就是nachos) 又有depend:,一次make只能生成一個,如果只是make,那么會自動尋找第一個,所以要寫兩次,在depend:里面,只要是為了應對不同的機型采取的編譯。

2.此外,相信不少人已經(jīng)注意到了code包下面同時還有Makefile.common,Makefile.dep等文件,我們打開Makefile.dep文件,看到如下:

可見,makefile.dep是為了說明不同的機型所采用的,我所用的處理器就是i386的,所以Host=-DHOST_i386是沒錯的,如果你的機型是Sun APARC 或者HP,那么把相應的注釋除去就好。

再看makefile.common

其中定義了一些其他makefile文件可能會用到的常量,比如$(CC)就是g++,這個語句在以后還會遇見,提前注意一下。

另外,注意THREAD_H=../threads/copyright.h\

../threads/list.h\

../threads/scheduler.h\

../threads/synch.h \

../threads/synchlist.h\

../threads/system.h\

../threads/thread.h\

../threads/utility.h\

../machine/interrupt.h\

../machine/sysdep.h\

../machine/stats.h\

../machine/timer.h這種定義方法,這樣以后要用到這些頭文件時,直接一個THREAD_H就可一代表了,/代表換行符,是為了程序的美觀易讀。makefile.common的例外一些內(nèi)容,下面講解。

3.具體代碼Makefile

以code/threads下的makefile為例:

注意以前定義過的常量,如$(THREAD_H),$(THREAD_C),$(THREAD_O),等等

此外,需要注意的是,DEFINES=-DTHREADS這行的意義在程序中可以用#ifdef的宏命令檢測到,這在以后文件系統(tǒng)中有重要應用。

main.o: ../threads/main.cc ../threads/copyright.h ../threads/utility.h \

../threads/bool.h ../machine/sysdep.h ../threads/copyright.h \

/usr/include/stdio.h /usr/include/features.h \

/usr/include/i386-linux-gnu/bits/predefs.h \

/usr/include/i386-linux-gnu/sys/cdefs.h \

/usr/include/i386-linux-gnu/bits/wordsize.h \

/usr/include/i386-linux-gnu/gnu/stubs.h \

/usr/include/i386-linux-gnu/gnu/stubs-32.h \

/usr/lib/gcc/i686-linux-gnu/4.7/include/stddef.h \

/usr/include/i386-linux-gnu/bits/types.h \

/usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \

/usr/include/_G_config.h /usr/include/wchar.h ../threads/stdarg.h \

/usr/include/i386-linux-gnu/bits/stdio_lim.h \

/usr/include/i386-linux-gnu/bits/sys_errlist.h /usr/include/string.h \

/usr/include/xlocale.h ../threads/system.h ../threads/thread.h \

../threads/scheduler.h ../threads/list.h ../machine/interrupt.h \

../threads/list.h ../machine/stats.h ../machine/timer.h \

../threads/utility.h

這些代碼是說main.o文件的生成以來后面的.h文件

此外,這里的include相當與把后面的makefile里面的內(nèi)容全部加載到這個文件,也就是要執(zhí)行Makefile.common和Makefile.dep各一次,

于是我們把剩下沒看的Makefile.common看一下:

首先來看

$(PROGRAM): $(OFILES)

$(LD) $(OFILES) $(LDFLAGS) -o $(PROGRAM)

這條語句,這條語句是為了生成可執(zhí)行文件nachos的,

$(PROGRAM)=nachos

$(OFILES)=$(C_OFILES)+$(S_OFILES)

$(S_OFILES)=switch.o

$(C_OFILES)=$(*.o)這個看是那個包調(diào)用的,里面有定義

表示這個包里面的nachos可執(zhí)行文件依賴于哪些.o文件和.c文件

然后執(zhí)行$(LD)(=g++) $(OFILES) $(LDFLAGS) -o $(PROGRAM)

這種語句相當與我們平時的編譯語句g++ main.o -o main應該很好理解

然后我們再來看看

$(C_OFILES): %.o:

$(CC) $(CFLAGS) -c $<

%表示任意長度的非空字符,%.o文件表示任意.o文件,表明.o文件的生成方式。

$(CC) =g++,$

為了給lab1線程切換做好準備,要注意一個文件的生成,那就是switch.o的生成方式,這個是采用交叉編譯實現(xiàn)的。我們可以看到switch.c這個文件里面寫的都是匯編代碼,因此需要使用$(INPATH)和$(HOST)的值,這些值什么意思都講過。

其他包里面的Makefile基本上是和threads包里面是差不多的,再次不再贅述!

在此給出注釋過的Makefile的代碼包下載:

http://pan.baidu.com/share/link?shareid=2443717544&uk=2822100601

第二部分 Nachos中文教程

想要快速了解nachos如何模擬計算機上真實的操作系統(tǒng),必須仔細研讀Nachos中文教程,建議每個Lab先把Nachos中文讀個2~3遍,然后自己思考。

Nachos中文教程分為六個章節(jié),第一第二個章節(jié)主要對Nachos整體的介紹,這兩章很重要,也是lab1之前必須研讀完的。

每個章節(jié),Nachos中文教程都會列出Nachos其中的函數(shù),具體的原理等等信息。

這對于我們了解操作系統(tǒng)理論,養(yǎng)成良好變成習慣以及提升自己工程能力都是非常有幫助的。

下一期,我們將進入Nachos lab1-線程。

總結(jié)

以上是生活随笔為你收集整理的nachos中文教程java_Nachos3.4系列-2 Makefile 与Nachos中文教程 【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。