顯示具有 中正資工 標籤的文章。 顯示所有文章
顯示具有 中正資工 標籤的文章。 顯示所有文章

2011-04-25

NP作業2


homework2 作業題目
In this homework, you will write a pair of Little Messenger client and server. The requirements of the Messenger system is as follows.
1. The Messenger client operates in dual modes: command mode and chatting mode. (10%)
2. A user can register a new account from the Messenger client on line, and log in on the Messenger server. (20%)
3. The user can list on-line users on the server.(10%)
4. A user can send messages to another on-line user, or start a conversation with him or her.(20%)
5. A user can broadcast a message to all on-line users. (10%)
6. A user can leave a off-line message to another, and he/she can see the off-line message when he/she logs in.(10%)
7. A user can log out the server. (5%)
8. Add 5 points for each new function.
You do not have to design a GUI like Live Messenger. A text-mode interface is pretty fine. The server can be on an arbitrary port. Due date: Apr. 29.


note:

gcc -o


(ca)

工作站> setenv LC_ALL zh_TW.UTF-8
把目前連線全部的編碼方式都改成UTF-8


[抓蟲中]
以下是流程圖,一樣是用office2010 power point快取圖樣拉的。









參考資料:

1. The World of select()
http://www.lowtek.com/sockets/select.html

So one main advantage of using select() is that your server will only require a single process to handle all requests. Thus, your server will not need shared memory or synchronization primitives for different 'tasks' to communicate.
> ya!! 一個process!! no more fork!!


2. 
unpv13e/
select/strcliselect01.c
select/strcliselect02.c
tcpcliserv/tcpservselect01.c
tcpcliserv/tcpservpoll01.c


3. Socket Client Examples
 http://www.tutorialspoint.com/unix_sockets/socket_client_example.htm

4. gcc 語法
http://aikosenoo.pixnet.net/blog/post/23038692

2011-04-12

NP作業1

因為沒有閒置機器可供玩轉,所以先安裝虛擬機器
(以下說明網頁來自重灌狂人)


  • 一、在主電腦安裝VirtualBox軟體

  • 二、在VirtualBox建立新的虛擬電腦

  • 三、建立新的虛擬硬碟機

  • 四、選定開機光碟機

  • 五、啟動虛擬電腦、安裝作業系統

  • 六、安裝好系統,更新VirtualBox專屬驅動程式



  • 當然5.6那兩點跟作業需求的Unix-like不一樣。

    應用OS fedora,google後就有關網可供下載iso。

    虛擬光碟軟體:http://www.daemon-tools.cc/eng/home 我只裝了lite,其他功能用不到。


    接下來作業要求

    homework01 作業題目

    In this homework, you will write a simple Web server with C/C++ in the UNIX environment. The specification of this Web server is as follows:

    1. The Web server can be accessed from one of the GUI-based Web browsers, such as IE, Firefox, etc. (40%)

    (還好是一個就OK....)

    2. The user can access an HTML file on the server on the Web browser. (20%)

    3. The user can access a picture (in the format of JPEG or GIF, etc.) from the Web browser. (15%)

    4. The Web server can handle zombie processes well.(10%)

    5. Add 5 points for each new function (access control, support more data types, ...)

    Your Web server will listen on port 80 if possible (but not required). Please upload your report (in one or two pages) in PDF format to e-course by 4/6, and demonstrate your program to the TAs in that week.



    同學提供參考網址: http://www.jbox.dk/sanos/webserver.htm

    fedora沒有內建vim,這怎麼可以呢!!


    要先切到admin account才可以安裝。
    要改兩個檔案不要忘記了~



    如何在Fedora中安裝vim → http://hi.baidu.com/xuehuo_0411/blog/item/f34197968c49287d54fb9652.html

    yum install vim

    也不要忘記安裝gcc....



    [完成]
    以下是用office2010 power point快取圖樣做的流程圖



    2009-05-20

    5/20 OS上課筆記

    Memory Management

    向slab要記憶體,slab跟body system要


    用page為單位配置記憶體可以避免不同process互相讀取記憶體


    libC的配置演算法可以多看看。


    因為microC是及時OS,所以可以做出假設:


    free除了要給指標外,還要知道要歸還給哪個partition,因為切的大小不一樣。
    這邊要加後半部分的判斷據說很簡單。


    partition彼此之間無法轉換空間,slab可以把partition中沒有在用的部分還給body system。

    2009-05-18

    5/18 OS上課筆記

    雖然把for loop攤開來寫這個區段的執行速度會變快。
    但是...
    ├好的compiler會自動攤開手動容易出握不容易抓bug
    ├雖然這段速度變快但是整體程式效率不一定會提升
    └程式效率下降

       ┌→從ready queue搬到waiting queue或其他的搬運
    程式在搬運時,是參照task的priority般的。



    OS_EventTO()
        ─TimeOut
    如果等太久,那就把他kill掉。ex:因為網路線掉了封包沒等到

    在程式裡加上timeout,基本上可以避免Deadlock。


    被叫醒的task要看是誰叫醒的(檢查flag),像白馬王子叫醒的話要微笑史瑞克的話要尖叫。



    pend可以這樣用
     xxx_pend() 集合後
     xxx_post()一起執行



    Semaphore

    2009-05-06

    5/6 OS上課筆記

    XXXXX用來看堆疊使用率。


    mem由下往上填0。

    因為都填0會造成誤判,所以microC就填怪值。


    kernel內的大array要記得malloc,不可直接用。



    不能用StackPointer(SP值)來算堆疊使用率,因為SP值是目前使用率,不是最高使用率。
    所以要數0!!


    一般來說stack不需要初始化,除非在debug。



    Deletimg a Task
    ─判斷在ready/waiting queue,並從中移走。

    刪除task,之前跟系統要的resource都要free掉。
    ─要的記憶體、open的file、開的socket

    microC/OSII中沒有辦法直接free,只會刪除。(????)

    1)錯誤檢查:存在與否
    2)從queue中移走
    3)插入一個preemption point
    ─和卡位很像,打開中斷向量(interrupt)。
    4)
    5)從priority table中移走
    6)叫OSSched()
    ─自殺才需要→最高優先權者才有辦法自殺→因為最高優權者不見了所以ready queue需要改

    2009-04-29

    4/29 OS上課筆記

    interrupt under uC/OSII

    p.62

    這個地方用驅動程式底層當例子。

    基本上很難看出有interrupt過,除非詳細看過時間。

    使中斷enable的code出現在程式開始沒多少。


    水藍色:

    橘紅色:



    (2)的OSInNesting是因為中斷可巢狀,但在OSInNesting==1才需要寫irt。

    排程器如果發現目前task和要切過去的task相同,則直接return,不動作。跳(8)

    (5)中斷

    (6)沒有這行就不能巢狀中斷

    同一類的中斷不要用nesting發生第二次,會rest condition。因為重要性一樣,就FIFO就好了。


    巢狀是為了在優先權低的中斷發生時,讓高權重的中斷可以搶先。

    通常低優先權的中斷不能在高優先權中段時搶先,不論軟硬體皆然。不過也只是"通常"。

    例外:Timer沒那麼重要,但是對系統架構很重要,所以可搶先。



    窩窩窩喔喔 ch3結束



    ch4開始


    規定"ISR內不可以create task"

    OSTCBInit()用來填參數,沒有就塞0。

    OSTaskCreatHook() 方便大家使用的plug-in,本身就是空的大括號。

    2009-04-13

    4/13 OS上課筆記

    heap uc/osII
    ins O(logN) O(1)
    del O(logN) O(1)
    min O(logN) O(1)

    why 查表? 因為用雙for loop時間複雜度會變高。

    2009-04-08

    4/08 OS上課筆記

    p.34~35

    全部都放在critical section內一定不會出錯(沒保護到),但是在多序執行時速度會變慢,網路傳輸狀況就是封包會掉。

    這邊的保護可否用semephor來取代?

    DI semlock EI semunlock
    台灣的劉小姐:最好不要,因為.....

    重點:要保護的東西在哪?有誰會讀取?
    這邊的物件在ready queue內,只有ap本身可以存取。

    後面這邊(p.35)
    老師認為不可以
    ISR結束後會去抓,.....


    Linux:比較短的寫在前面,比較長的寫後面。方便閱讀。


    p.36
    Ready Queue

    p.37
    電腦如何知道在表中找到ready(1)者?
    1)for loop

    p.40 41
    會考算法,必考。

    2009-03-25

    3/25 OS上課筆記

    3/23老師放假

    TCB 第一個欄位擺的是sp(stack pointer),指向目前task堆疊用到的位置。

    之後上到組語部分,就會進行更進一步的介紹。

    要用syscall->contask switch,不要直接修改。



    1個contask最多等一個時間中斷。

    prio算出值很無聊,改變頻率也不高,所以就先算好。

    以上就是恐龍本中的tcb。



    暫存器why only one??

    sp Regs PC psw
    有出現 這些都在stack中




    從TCB中把p30那四行拿掉,在每次的scadal都抓一次就好。

    Q: 只能在critical section中,表示有改變外面的全域變數。可不可以用secmafer取代??

    2009-03-18

    3/18 OS上課筆記

    了解這個章節恨重要

    ready queue CPU使用率


    當被兩個行程(process)鎖定時,XX要xxxxx。

    最主要還是要看規格對reader和writer的解讀。

    criitical section 用enable / disable interrupt 來保護。

    在xxxx,全部執行在kernel mode。


    AP1(void* pdata){
    semlock();
    counter ++;
    semunlock();
    }

    AP2(){
    sem
    print(counter);
    sem
    }

    關於sem的程式大概2.30行,用這些去保護一行有點浪費.....


    在嵌入式當中
    AP1(){
    PI();
    print(counter);
    EI();
    }

    AP2(){
    DI;
    print(counter);
    EI;
    }
    這兩三個cycle就做完了,用兩行保護一行比較划算。


    因為這樣(disable interrupt),所以小型嵌入式系統長期下timer會少算,一段時間後就需要調校。


    有一種不可以用!!!!!不然系統會一睡不醒!!!!

    ****有包含timer的東西不可以包在disinterrupt內,因為不知道時間過了沒.....
    -> 晚上嫌鬧鐘滴答聲吵拆電池,結果早上就起不了床....


    在x86中,剛好可以執行。
    生:剛好???
    五哥:剛剛好會講到XDDD

    因為在86的idel task中,有一行程式碼會把中斷打開。



    fu1(){
    PI();
    fn2();
    EI();  這邊之後的保護被fu2打開了!!!!
    }

    fu2(){
    DI;
    print();
    EI;
    }


    有兩種可以把interrupt的狀態存起來

    第一種:stack
    第二種:任何都可以

    第三種:在這種情況下和第二種一樣 p12



    因為xxx,有的時候會因為指定task id所以無法運作,這是ucosII中的小瑕疵。

    Idel task會織毛線(counter+1)


    TCB (Task Control Blocks)
    只要TCB存在,就會出現在link-list中。

    double link-list就是刪除很方便XDDD


    p22
    Cur / Rdy
    這兩個變數重複了,因為普通狀況下都一樣,只有在發生contask switch的時候會不一樣。

    A換到B時,Cur指A,Rdy指B。

    第五個變數表示陣列,之前講過。
    裡面都存指標,用來指到TCB。


    contask switch時,就是在算新task的優先權。

    查表 -> 比較優先權 -> 抓task -> 完成cntask switch


    查TCB在上學期恐龍本中,要存什麼東西?
    那些東西在p23中,是不是都一樣?恐龍本中的少了哪些?

    2009-03-16

    3/16 OS上課筆記

    今天的小考題目:semaphore oprtation 和 dis/enable interrupt 兩者都是衛了保護資料的程式。那投影片37頁的程式可不可以帶換成後者?


    在xx狀況之下,zz會掉封包。

    在xx狀況下,任何interrupt都進不去,所以I/O會有問題。

    五哥:今天題目出的不錯,不過有點難,啊,不過分數也不要緊。


    critical section藉由鎖定程式,來保護資料



    五哥:早知道就上個禮拜六(白色情人節)來補課。
    生:why??
    五哥:因為我見不得人好!!!!(崩潰~~ 強烈的去死光芒啊~~)


    TASK1:這兩個fun只能在PC平台上使用。



    p52: task5回'嗯',task4聽到後就繼續講。


    p.55

    Linux2.6中幾個行程就會出現幾個堆疊,都是全4k或全8k。

    Linux2.4堆疊和2.6剎不多,就少了xx的stack。堆疊量的配置一定是8k,因為要預留4k給isr使用。所以比較浪費空間。

    xxxxxxxxxx

    μC/OSII最快,因為它最浪費記憶體。