2009年6月26日 星期五
深夜有感
2009年6月19日 星期五
抱怨
OS_hw6
●完成目標
1.以創立thread方式改寫原程式碼以fork在localhost傳送和接收訊息,並加上傳遞和接收檔案之功能。
2.了解建立thread比建立process的成本低。●程式測試及運作環境
系上csie1工作站
●測資,已附在壓縮檔內
1. 中時電子報首頁原始碼
2. 自訂測資test.txt
●此程式分成六個部分
1. main program
2. TCPecho
3. Send function
4. Listen function
5. GetFileLength function
6. Unsigned long to string
Main program 創立一個socket,設定開啟port和最大連線數,並進入TCPecho。
TCPecho設立兩個thread,分別執行Send和Listen function。
Send function使用創立的socket,可以送訊息,也可以送檔案。送檔案時必須先告訴對方檔案大小和名稱,所以會用到GetFileLength function。同時因為使用系統的write function,所以要將檔案大小unsigned long 型態轉換成string,才能傳,此時就需要Unsigned long to string function。
Listen function使用創立的socket,可以收訊息,也可以收檔案。收檔案時對方會告訴自己檔案大小和名稱,會使用系統的read function,如果同意則開始收,即收即寫入本地端同名的檔案;若不同意則雙方回到一般傳訊息模式。
Send function和Listen function送收檔案時,是採用送訊息的方式,所以和一般送純文字訊息一樣。
●測試方式
1.使用Server和Client所在資料夾的make重新編譯程式,輸入make即完成編譯和呼叫程式之動作。
2.傳送訊息:
2.1在server端輸入欲傳送之訊息,並查看client端是否收到。
2.2在client端以同樣方法傳送訊息,並查看在server端是否收到。
3.傳送檔案:
在任意一端(Client或Server),輸入SendFile:[yourfile],即可詢問對方是否要接收檔案,例如要傳送壓縮檔內的測資mainpage.htm,請輸入SendFile:mainpage.htm
如同意接收,接收端必須回答兩次yes才能接收檔案,發送端才開始傳資料;若不同意接收,則雙方回到傳訊息模式。
如欲終止程式,請按ctrl+c,即可結束程式。OS_hw2
想快快樂樂裝作業要求的四個server(sshd,httpd,vsftpd,samba)之前,要先將SELinux和Linux的防火牆關掉,不然會遇到很多奇怪的問題,做起來會覺得特別辛苦。會這麼做的原因是真的遇到很奇怪的問題,而網路上提供給初學者的解法是將這SELinux和Linux的防火牆服務停用。
因為這只是在虛擬機器上做,所以將防火牆和SELinux關掉應該是無傷大雅的。
裝了這些服務之後,覺得自己的電腦也可以
提供眾多的服務,感覺很棒。過程中,遇到問題查網路上的解決方法,順便了解如何操作Linux,雖是粗淺的摸索,亦令我滿足,很有成就感。
剩下的步驟可以看鳥哥或是網路上其他的教學文
2009年6月18日 星期四
Systemtap on Fedora10
yum --enablerepo=fedora-debuginfo --enablerepo=updates-debuginfo install
kernel-debuginfo
http://sourceware.org/systemtap/wiki/SystemtapOnFedora
打這些指令,再跑助教的兩道測試指令(hello probe & ??? probe),應可以正常work。
記得要有root權限,可換成root帳號或是sudo或su達成。
OS_hw5
我用的OS是Fedora10,gcc是4.3.2,Linux kernel 是2.6.29。
由於kernel 2.6.25以後,kgdb已附在裡面,所以不用下載kgdb和patch,用不到助教投影片給的patch方法,但仍有一些設定需要按照投影片的做法。
其他步驟和舊版本kernel 差不多,請參照其他人寫的舊版本使用方法。
此方法經證實可在2.6.29上使用
感謝yungshin提供方法
0.安裝ncurses-devel
sudo yum install ncurses-devel
1.linux kernel 2.6.25以上 已藏有 kgdb,不用再下載kgdb的source code
輸入make menuconfig,選擇特定選項,啟用kgdb
設定.config檔
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_RODATA=n
2.將host system和 target system 的vm 開啟serial port,做server and client設定
3.host 切為root權限,這步不用在target system上做
make
make modules
make modules_install
make install
4.複製三個重要檔案到target system的 /boot/
vmlinuz-(uname -r)
System.map-(uname -r)
initrd-(uname -r).img
5.修改target system的 /boot/grub/menu.lst
若timeout=0,將它改為五
新增
title Fedora (OOXXkgdb)
root (hd0,0)
kernel /vmlinuz-(uname -r) ro kgdboc=ttyS0,115200 kgdbwait
initrd /initrd-(uname -r).img
5.1
設定target system的kernel.sysrq為一
這樣target就會在開機的時候等host的gdb進來
請vim /etc/sysctl.conf
6.將target system reboot,並把host system 切換到root 權限和linux source
code 的資料夾(自己下載的檔案解壓縮)。
host system 要在target system 重開機時馬上輸入兩行指令
gdb vmlinuz
target remote /dev/ttyS0
7.差不多結束
Reference:
http://blog.linux.org.tw/~jserv/archives/002045.html
http://linux.chinaunix.net/bbs/archiver/tid-1045674.html
http://www.penna.cn/blog/article.asp?id=179
http://bbs.driverdevelop.com/htm_data/12/0807/112490.html
心得:
感謝同學互相幫忙,不然因為新版本核心,不是助教投影片上寫的fedora8,要找的資料很多很雜,很擔心沒有太多時間看資料一個一個方法測試。做的過程當中,重做好幾次,覺得很煩,而且不知道自己做得對不對,因此沒有拍照記錄過程。
期末考
覺得老師講得很抽象,也不知道要考哪邊,os是個天書科目。
唸書時候的心裡狀態
osososososososososososososossoososososososososososososososososososososososososoooooooooooooooooooooooooooooooooooooooooooossssssssssssssssssssssssssooooooooooooossssssssssssssssssooooooooooooossssssssssssssos
考完試的心裡狀態
(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)(~^O^~)
寫完OS部落格,暑假就到了!!