SlideShare a Scribd company logo
1 of 133
Download to read offline
系統程式

 鄭彬
SYSTEM SOFTWARE
何謂系統程式?
支援電腦作業的各類軟體,使用者基本上不須要知
 道電腦硬體上是如何運作的,就可以使用電腦去
 解決問題。

例如:文書處理軟體,巨集指令,組譯程式,載入程式,連接程式,作
 業系統,資料庫管理系統,WORD, EXCEL, POWERPOINT,ACCESS
 等。
系統程式是一種介面程式
系統程式是一種介面程式,介於硬體與應用
 程式之間

 硬   系    應   使

 體   統    用   用

     程    程   者

     式    式
介面
雙方都依循的規則

硬體:改變電氣訊號的傳輸方式(例如:網路卡、VGA
 卡、USB…)

軟體:改變資料的格式(例如:壓縮程式、文字編碼…)
以軟硬體來區分


     硬體
電腦
           系統程式:與硬體相關的程式,例如WINDOWS,
     軟體    UNIX,SERVER2003, WinCE(PDA)


           應用程式:解決一般的應用問題,使用者無需
           知道硬體細節內容
以程式來區分
系統程式:作業系統,載入程式,連接程式,或
 任何程式將一般指令轉為機器碼的程式。


應用程式:WORD,EXCEL,POWERPOINT,ACCESS等
 建築在系統程式之上的程式。
系統程式與應用程式
系統程式與應用程式有何不同?


     對於寫程式的人而言→稱之為系統程式

軟體


     對於應用已經寫好程式的人而言→稱之為應用程式
作業系統(OS)
作業系統(Operating System):負責控管電腦
     O
 的軟體及硬體的工作方式。

I/O(Input/Output):滑鼠,鍵盤,螢幕
硬體控管:CPU,記憶體管理,I/O,主機板上的晶片組,介面卡,硬碟
   機,光碟機,磁碟機,USB,網路…
軟體控管:批次作業,多程式作業,分時作業,即時作業,行程控制,
   BIOS程式,CMOS設定,DRIVER(驅動程式)…
編譯程式的基本流程
c程式(*.cpp)       編譯          ERROR



             機器語言(*.OBJ)



                 連結        其他的*.OBJ檔案
目的程式


             執行檔(*.EXE)
機器語言
機器語言:由一連串的0或1組合而成的程式
 碼,提供給CPU來執行。




    01001101010101010111100101010010
    10101010100001010101010101010100
    00101010100110010111110101010101
組合語言
組合語言:利用英文符號,稱之為助憶符
 號,幫助編寫機器語言。
                                將符號轉換成等效
將助憶符轉換成                          值(位址,資料)
  機器碼


     運算碼表                 符號表

     助憶符 機器碼              符號      值
     HJ     0000          SUP     20
     JNZ    1000          SAV     36
     …      …             …       …
     EOR    F000          L1      F800
組合語言
相對位址:與某一指令所相差位元組數量,可推出另一指令
 所在的位址。相差位元組數量有正負值之分。

絕對位址:實際的記憶體位址。
程式重新定位
重新定位(relocation):在多工作業的環境中,因為不知
 道程式會載入到記憶體什麼地方,在載入時需重新計算位址。

對於相對位址部分無需重新計算位址,只有程式中使用到絕對位址的地
 方才需要重新計算位址。


軟體方式:
可重新定位的程式會將使用到絕對位址的地方整理出來,製作一個表格,並記錄
  此絕對位址在程式中的相對位址,以便一個載入程式將作業系統給的程式起
  始位址值,依據表格記錄,加入此一相對位址值而成為一個新的絕對位址。


硬體方式:
使用重新定位暫存器,位址由作業系統決定。
重新定位
       有效位址     重新定位暫存器

        8192      16384



原始程式              ⊕       24576




                                  重新定位後


          做加法




       重新定位暫存器內的值由OS給與
連結程式和載入程式
目的程式(object):剛經過編譯出來的一個二進
 位檔案。檔名通常為「*.obj」。
連結程式(linker):將一個或兩個以上的目的程
 式連結起來,成為一個可執行的檔案。檔名通常
 為「*.exe」。
載入程式(loader):將程式載入記憶體,重新定
 位並自動執行。
bootstrap loader
靴帶式載入程式:

程式放置在主機板上的ROM中,在開機時,CPU會將
 此程式載入到主記憶體中,這個程式再將作業系
 統載入。
Dynamic Linking
動態連結:

副程式在被呼叫時,才被載入到記憶體中,以節省
 載入時間及記憶體。




         副檔名通常為 *.dll
巨集程式
巨集程式(Macro Processor):一種預先寫好
 的程式架構,在編譯時,會將適當的參數
 填入巨集程式內,再複製到主程式碼中一
 起編譯。

       START   32
       MACRO   &DA,&DG
       LDA     3,&DA
       SFT     3,1,1
       ….
       ….
       END     MA
文書編輯程式
文書編輯程式:
 由鍵盤輸入字串
 顯示文字
 提供工具以幫助修改文字
 存取檔案
除錯程式
除錯程式(debuger):
 可單歩執行程式
 可設定中斷點
 可顯示暫存器與參數的值
複習
請問何謂系統程式?
請問系統程式與應用程式有何不同?
請繪圖表示編譯程式的基本流程。
請問為何程式需要重新定位?
請畫圖說明硬體重新定位的工作方式。
試述靴帶式載入程式的工作原理。
請問使用動態連結的優點。
請問使用巨集程式的優點。
請問文書編輯程式做那些工作?
請問除錯程式有那些重要功能?



簡答:
機器語言、組合語言、相對位址、絕對位址、目的程式、連結程式、載入程式、
  機器碼、符號表、CPU、ROM 、loader、linker、debuger、macro processor、
  bootstrap、system software、operating system
程式語言
利用文書處理軟體編寫程式,再將其轉換成
 機器碼。

低階語言:直接與機器碼相關的語言,例如
 組合語言。

高階語言:不直接與機器碼相關的語言,例
 如c,flash,html語言。
程式語言
FORTRAN:一種工程用的語言
COBOL:一種商業用的語言
BASIC:一種工商用的語言
PASCAL:一種教學用的語言
c:一種工商用的語言
HTML:一種網頁用的語言
SQL:一種資料庫用的語言
…
編譯器與解譯器
編譯器(compilation):將程式碼一次全部編
 譯完成,成為組合語言,再一次的全部的
 轉換成機器碼。執行速度較快。

解譯器(interpretation):逐行的編譯程式
 碼並執行,一次一行。執行速度較慢。

組譯器:將組合語言程式碼轉換成機器碼。
高階語言處理流程
  前端處理程式


 原始高階語言程式

   編譯程式

  組合語言程式

   組譯程式

 可重新定位的機器碼

 連結各目的程式


   執行檔
編譯程式的目的
轉換成等效的目的程式,並將錯誤找出。


高階語言程式碼     編譯程式    目的程式




 文字檔
                    二進制檔
編譯流程
 詞法分析

 語法分析


 語義分析


中間代碼產生


代碼最佳化              六大步驟

 代碼產生

         連結各程式
目的程式             執行檔
複習
試述低階語言與高階語言的差別為何?
請列舉出三種程式語言的名稱。
試述編譯器、解譯器與組譯器三者的主要工作目的。
請繪圖說明高階語言的處理流程。
請問編譯程式的目的為何?
請繪圖說明編譯流程的步驟。

簡答:
運算元----變數名稱,數值
運算子----加減乘除符號
代碼----使用數字來表示一件事情,例如指令,運算元
編譯名詞
詞法分析(lexical analysis)
語法分析(syntax analysis)
語義分析(semantic analysis)

語法樹(syntax tree or parse tree)
詞法分析
將程式碼的構成單元分類,並轉換成字符碼
 形式。
例如:
DATA = 5 * MONEY + 100
                           1   識別字   值   DATA
                           2   指定號   值    =
                           3   整數    值    5
                           4   乘號    值    *
                           5   識別字   值   MONEY
                           6   加號    值    +
                           7   整數    值   100


 結果:id1=5*id2+100
編譯名詞分類
識別字:變數,函數名稱
保留字:如 for, while, if, switch
字符碼(token):識別字或保留字的代碼
常數:如 100, 232, 3.14159
運算子:如 +,-,*,/
分界符:如 「;」「(」「)」「,」
識別字的BNF描述
<識別字> → <字母> , {<字母>|<數字>}
<字母> → a|b|c|……|z
<數字> → 0|1|2|……|9         可重覆
                          (迴圈)




             邏輯OR
識別識別字流程

    取字元



     字母?     NO

       YES

 合成識別字及取下一字元




   字母或數字?         NO


       YES
語法分析
依據規則判定一個算式是一個合法的敍述。

     1 <指定叙述> → <識別字> = <運算式>
     2   <運算式>   → <項> + <運算式>
     3   <運算式>   → <項>
 優
 先   4    <項>    → <因子> * <項>
 權
     5    <項>    → <因子>
     6   <因子>    → <識別字>
     7   <因子>    → <常數>
     8   <因子>    → (<運算式>)
推導算式 id1=id1+id2*20 是否是一個合法的叙述。
                                          語法錯誤?
由規則1,得到<指定叙述>→<識別字> = <運算式>
由規則2,將<運算式>替換成<項> + <運算式>,得到<識別字> = <項> + <運算式>
由規則5,將<項>替換成<因子>,得到<識別字> = <因子> + <運算式>
由規則6,將<因子>替換成<識別字>,得到<識別字> = <識別字> + <運算式>
由規則3,將<運算式>替換成<項>,得到<識別字> = <識別字> + <項>
由規則4,將<項>替換成<因子> * <項>,得到<識別字> = <識別字> + <因子> * <項>
由規則6,將<因子>替換成<識別字>,得到<識別字> = <識別字> + <識別字> * <項>
由規則5,將<項>替換成<因子>,得到<識別字> = <識別字> + <識別字> * <因子>
由規則7,將<因子>替換成<常數>,得到<識別字> = <識別字> + <識別字> * <常數>



結論:語法正確!                     1 <指定叙述>     → <識別字> = <運算式>
                             2    <運算式>   → <項> + <運算式>
                             3    <運算式>   → <項>
                             4     <項>    → <因子> * <項>
                             5     <項>    → <因子>
                             6    <因子>    → <識別字>
                             7    <因子>    → <常數>
                             8    <因子>    → (<運算式>)
語法樹
      指定叙述
                                      <指定叙述>→<識別字> = <運算式>
識別字     =        運算式                  <識別字> = <項> + <運算式>
                                      <識別字> = <因子> + <運算式>
                                      <識別字> = <識別字> + <運算式>
            項     +    運算式            <識別字> = <識別字> + <項>
                                      <識別字> = <識別字> + <因子> * <項>
            因子                        <識別字> = <識別字> + <識別字> * <項>
                                      <識別字> = <識別字> + <識別字> * <因子>
        識別字                           <識別字> = <識別字> + <識別字> * <常數>


                       項
                                  1 <指定叙述>     → <識別字> = <運算式>
                                  2    <運算式>   → <項> + <運算式>
                  因子    *    項
                                  3    <運算式>   → <項>
                 識別字              4     <項>    → <因子> * <項>
                                  5     <項>    → <因子>
                             因子
                                  6    <因子>    → <識別字>
                                  7    <因子>    → <常數>
                             整數
                                  8    <因子>    → (<運算式>)
語法樹
語法樹:以圖形的方式表示出語法的結構。
複習
詞法分析、識別字、保留字、字符碼、優先
 權、語法樹
語義分析
檢查變數是否有事先宣告。
檢查函數引數的個數是否與呼叫端一致。
檢查資料型態是否一致。(整數→浮點數→雙精浮點數)
中間代碼產生
 將中序式轉成後序式
 將算式轉成四元式

四元式:
運算子OP,第一運算元ARG1,第二運算元ARG2,運算結果RESULT
例如:
(-a+b)*c (使用@表示減法)
             OP   ARG1   ARG2   RESULT
         1    @    a      -      T1
         2    +   T1      b      T2
         3    *   T2      c      T3
四元式
例如:
SUM=SUM+DATA*20       (SUM及DATA為浮點數,使用ITR表示型態轉換)

                        OP    ARG1   ARG2   RESULT
                  1     ITR    20     -      T1
                  2     *     DATA   T1      T2
                  3     +     SUM    T2      T3
                  4     =      T3            SUM
四元式
例如:
ID1=ID1+ID2*20       (ID1及ID2為浮點數,使用ITR表示型態轉換)

                        OP   ARG1   ARG2   RESULT
                 1     ITR    20     -      T1
                 2      *    ID2    T1      T2
                 3      +    ID1    T2      T3
                 4      =     T3     -      ID1
四元式
例如:
a||b&&c==d   (布林代數運式,「&&」的優先權大於「||」)

                  OP   ARG1   ARG2   RESULT
              1   ==    c      d      T1
              2   &&    b     T1      T2
              3   ||    a     T2      T3
四元式
例如:
if A then B else C    (jnz:jumpNotZero若為真則跳。 j:jump跳躍)

                       OP   ARG1   ARG2   RESULT
               1      jnz      A    -       K
               2       j       -    -      M+1



                  K    B的動作……


                       OP   ARG1   ARG2   RESULT
               M       j       -    -       R


              M+1     C的動作……
              R
複習
試述語義分析的目的。
試述「中間代碼產生」做那些事情?
代碼最佳化
產生等效的程式碼,但執行的速度較快,記
 憶體的使用量較少。

 常數運算
 強度削弱
 共同子運算式删除
 迴圈不變數外提
代碼最佳化(常數運算)
K=2;
M=5*K;

可直接化簡為:
M=10;



          節省了一個乘法運算
代碼最佳化(強度削弱)
將乘法(較慢)轉成加法(較快)

 K=1;                     K=1;
 do{                      M=5*K;
 M=5*K;                   do{
 ….                       ….
 K++;                     K++;
 }while(k<=4);            M=M+5;
                          }while(k<=4);

                 K   M
                 1   5
                 2   10
                 3   15
                 4   20   相同的結果
代碼最佳化(共同子運算式删除)


 k=1;      k=1;
 m=k*20;   m=k*20;
 n=j+y;    n=j+y;
 p=k*20;   p=m;



                     因為m=k*20的
                     值保留到執行
                     p=k*20都没有
                     變化,所以令
                       p=m即可
代碼最佳化(迴圈不變數外提)
k=0;
                          k=0;
r=1;
                          r=1;
do{                       f=r+100;
w=6*r;                    d=c+50;

f=r+100;                  do{

d=c+50;                   w=6*r;

}while(r<3);              }while(r<3);




                                         將其移
               迴圈內的二行指令                  到迴圈
               的值在迴圈內是維                  外圍
               持一個常數,反覆
               的計算只會浪費時
                  間
代碼產生
產生目的代碼。

產生已被定址的機器碼,並且能夠立即執行。
產生尚未定址的機器碼,等待連接程式處理。
產生組合語言代碼,等待組譯程式轉換成機器碼。 (常見)
複習
請述「代碼最佳化」的目的。
請問「代碼最佳化」有那些型式?
請述「代碼產生」的目的。
請問「代碼產生」有那些型式?
語言描述與語法分析
語法:使用合乎規定的符號來表示一個敍
 述。
非正規法:表示運算式的基本架構,本身不
 能被執行
上下文無關文法
Backus-Naur Form(BNF)規則:

      1   <ex> := <ex> + <term>
      2   <ex> := <ex> - <term>
      3   <ex> := <term>
      4   <term> := <term> * <factor>
      5   <term> := <term> / <factor>
      6   <term> := <factor>
      7   <factor> := (<ex>)
      8   <factor> := 0|1|2|3|4|5|6|7|8|9



            如果可以導出,則稱為語法正確,否則稱為語法錯誤
優先權

低                                     高


    ex            term       factor
    +              *        ()12345
    -              /         67890




         優先權:决定那一個運算子要先做,例如先乘除後加減
複習
請問何謂語法?
請問「上下文無關文法」的目的。
導出「1+2*3」的文法
       1
<ex>   → <ex> + <term>
       3
       → <term> + <term>                 1   <ex> := <ex> + <term>
                                         2   <ex> := <ex> - <term>
       6
       → <factor> + <term>               3   <ex> := <term>

       8                                 4   <term> := <term> * <factor>
       → 1 + <term>                      5   <term> := <term> / <factor>
       4                                 6   <term> := <factor>
       → 1 + <term> * <factor>           7   <factor> := (<ex>)
       6                                 8   <factor> := 0|1|2|3|4|5|6|7|8|9
       → 1 + <factor> * <factor>
       8
       → 1 + 2 * <factor>
       8
       → 1+2*3



                                 執行時,由下往上,由左至右,優先權愈高,愈會在下方
畫出「1+2*3」的剖析樹
                              <ex>
                      1
                                                               1   <ex> := <ex> + <term>
                                                               2   <ex> := <ex> - <term>
               <ex>               +        <term>
                                                               3   <ex> := <term>
           3                           4
                                                               4   <term> := <term> * <factor>
        <term>
                                  <term>     *      <factor>   5   <term> := <term> / <factor>
                                                               6   <term> := <factor>
    6                         6
                                                    8          7   <factor> := (<ex>)

                          <factor>                      3      8   <factor> := 0|1|2|3|4|5|6|7|8|9
<factor>
8                         8
 1                            2


                                                            剖析樹
練習1*2+3
                                       <ex>
                                   1
                                                              1   <ex> := <ex> + <term>
                          <ex>         +           <term>     2   <ex> := <ex> - <term>
                      3                        6              3   <ex> := <term>
                 <term>                       <factor>        4   <term> := <term> * <factor>
            4                                                 5   <term> := <term> / <factor>
                                               8
                                                              6   <term> := <factor>
        <term>    *       <factor>
                                                              7   <factor> := (<ex>)
    6                                              3
                           8                                  8   <factor> := 0|1|2|3|4|5|6|7|8|9


<factor>                       2
8
    1

                                                            剖析樹
導出(1+2)*3
       3
<ex>    →   <term>
       4
        →   <term> * <factor>                1   <ex> := <ex> + <term>
                                             2   <ex> := <ex> - <term>
       6
        →   <factor> * <factor>              3   <ex> := <term>
       7                                     4   <term> := <term> * <factor>
        →   (<ex>) * <factor>
                                             5   <term> := <term> / <factor>

       1→   (<ex> + <term>) * <factor>       6   <term> := <factor>
                                             7   <factor> := (<ex>)
       3→   (<term> + <term>) * <factor>     8   <factor> := 0|1|2|3|4|5|6|7|8|9

       6
        →   (<factor> + <term>) * <factor>
       8→   (1 + <term>) * <factor>
       6
       →    (1 + <factor>) * <factor>
       8
       →    (1 + 2) * <factor>
       8
       →    (1 + 2) * 3
練習1+(2*3)
                                 <ex>
                         1
                                                              1   <ex> := <ex> + <term>
                  <ex>           +                 <term>     2   <ex> := <ex> - <term>
              3                                6              3   <ex> := <term>
           <term>                             <factor>        4   <term> := <term> * <factor>
      6                                                       5   <term> := <term> / <factor>
                                          7
                                                              6   <term> := <factor>
<factor>                             (<ex>)
                                                              7   <factor> := (<ex>)
8                                3                            8   <factor> := 0|1|2|3|4|5|6|7|8|9
                         <term>
1
                    4
             <term>          *        <factor>
           6                         8
       <factor>                      3
       8                                                    剖析樹
       2
練習1*(2+3)
                            <ex>
                           3
                           <term>                       1   <ex> := <ex> + <term>
                      4
                                                        2   <ex> := <ex> - <term>
             <term>          *           <factor>       3   <ex> := <term>
         6                              7               4   <term> := <term> * <factor>

    <factor>                                            5   <term> := <term> / <factor>
                                 (<ex>)
                                                        6   <term> := <factor>
    8                        1                          7   <factor> := (<ex>)
                                                        8   <factor> := 0|1|2|3|4|5|6|7|8|9
                          <ex>       +       <term>
1
                    3                       6
                <term>
               6                     <factor>
        <factor>                    8
        8                        3                    剖析樹
        2
語法圖
以圖形的方式來表示文法規則。
終端符號:  A      FOR

      單一字元
                           字串



非終端符號:        S




                   呼叫副函數
文法規則、語法圖與c語言程式碼
                                          文法規則
<A>→<B> <C> <D>
                      角括角代表
                       函數呼叫               語法圖

A       B         C           D



                                   void A()
    呼叫副函數                         {
                                  B();
                                  C();
                                  D();
              c語言程式碼
                                  }
文法規則、語法圖與c語言程式碼
<X>→A<I>| B<J>| C<K>

      OR




                        void X()
                I      {switch(symbol)
           A           { case 'A': I(); break;
  X                      case 'B': J(); break;
           B    J        case 'C': K(); break;
                         default: error=1;
           C    K      }
文法規則、語法圖與c語言程式碼
<A>→{B<C>}


 A
                  void A()
                 {
      C      B   while(symbol=='B')
                   c();
                 }
文法規則、語法圖與c語言程式碼
將下列一組文法規則畫成語法圖:
<S>→<A>.
S     A   ‧


               void S()
              {
              A();
              if(symbol != '.') syntax_error=1;
              }
文法規則、語法圖與c語言程式碼
<A>→C|(<B>)

A
     C


     (   B    )    void A()
                  {
                  if(symbol == 'C') return;
                    else if (symbol == '(' )
                      { B();
                        if(symbol != ')') syntax_error=1;
                      }
                  else syntax_error=1;
                  }
文法規則、語法圖與c語言程式碼
<B>→<A> <C>

B
     A        C


                   void B()
                  {
                  A();
                  C();
                  }
文法規則、語法圖與c語言程式碼
<C>→{+<A>}

C



         A   +    void C()
                 {
                 while(symbol == '+') A();
                 }
文法規則、語法圖與c語言程式碼
                                       void S()
                                      {
S                                     A( );
               A          ‧
                                      if(symbol == '.') return;
                                      else error();
                                      }
A
                          X           voidA()
                                      {
                                      switch(symbol)
     (     A                      )   {
                                        case 'x': return;
                                        case '(': A( );
                                         while(symbol == '+') A( );
                      A       +           if(symbol != ')' ) error( );
                                           break;
                                        default:
    文法部分:                                   error( );
    <S>→<A>.                          }
    <A>→X|(A{+<A>})                   }
文法規則範例

                          角括角代表
                           函數呼叫
上例文法部分:
<S>→<A>.
<A>→X|(A{+<A>})
     OR




                        while迴圈(大括號)
遞迴
          遞迴:程式自己呼叫自己
複習
三者的互相轉換:



           文法規則




   語法圖            c語言程式碼
中序式轉後序式複習
中序式轉後序式:
例:A*B/C→ (( A*B ) /C )→ AB*C/




                   搬到右括號的位置上




依照原來的優先權的方式,加上括號
中序式轉後序式複習
中序式轉後序式:
例:A/B^C+B*E-A*C
  → (((A/(B^C))+(B*E))-(A*C))
  → ABC^/BE*+AC*-
中序式轉後序式複習
中序式轉後序式:
例:a-b^c*d
  → abc^d*-
後序式的優點
不再具有括號及優先權的問題,計算機直接
 利用堆疊處理
由後序式算出答案
98 7 2 ^ / 4 5 * + 2 3 * -



           狀況                處置

           數字           放入堆疊

                    pop上面两個數值出來,
         運算符號
                    運算後,再放回堆疊
由後序式算出答案
98 7 2 ^ / 4 5 * + 2 3 * -



2                                      3
                   5
7                            20        2     *   6    -
     ^   49   /    4     *         +
98                           2         22        22       16
         98        2


                   狀況                   處置
                   數字                  放入堆疊
                                  pop上面两個數值出來,
                  運算符號
                                  運算後,再放回堆疊
由後序式算出答案
驗算: 98 7 2 ^ / 4 5 * + 2 3 * -


  98 7 2 ^ / 4 5 * + 2 3 * -
           49     20       6


       2



                  16
複習
試敍述後序式的優點。
請將 a-b^c*d 轉換成後序式。
請用堆疊的方式算出 「98 7 2 ^ / 4 5 * + 2 3 * - 」的答案。
中序轉後序語法圖
               第一運算元                                      運算子
                                        void E()
                                       {
 E                                     char OP;
          T
                                       T( );
                                       while(symbol=='+' || symbol=='-')
                            +          {
                 T                     OP = symbol;
putchar(OP);                           GetNextSymbol( );
                            -          T( );
                                       putchar(OP);
                                       }
                                       }


                                 運算子
     第二運算元
                                                       將運算符號放在兩
                                                       個運算元的後面
                 OP = symbol;
                 GetNextSymbol( );
                                                               1/3
中序轉後序語法圖
                        void T()
                       {
 T                     char OP;
          F
                       F( );
                       while(symbol=='*' || symbol=='/')
                   *   {
               F       OP = symbol;
putchar(OP);           GetNextSymbol( );
                   /   F( );
                       putchar(OP);
                       }
                       }



                                        將運算符號放在兩
                                        個運算元的後面



                                               2/3
中序轉後序語法圖
                                      void F()
                                     {
F                                    if (symbol == '(' )
       (           E             )
                                     {
                                     GetNextSymbol( );
                                     E( );
                                     GetNextSymbol( );
                                     }
                                     else if(operand(symbol))
                                     {
           0   1       ‧‧‧   9
                                     putchar(symbol);
                                     GetNextSymbol( );
                                     }
                                     }

                                                            輸出數值

輸出數值

                                                            3/3
複習
請用語法圖表示出中序轉後序的流程。
連線作業:I/O直接由CPU控制的作業,例如Internet,Word,
Excel,Photoshop。
 離線作業: I/O不直接由CPU控制的作業,例如公車刷卡,PDA,數
位相機等,皆由其他的數位設備取得資料。
 緩衝區作業: I/O直接將資料送到主要記憶體(RAM)中,等到CPU有
時間才處理,用以解決速度差異的問題。
 分時作業: CPU將各個使用者的使用時間分割,每次輪流使用一小
段時間。
 多程式作業:若一程式結束或進入I/O等待,OS立即選擇下一程式執
行,對使用者而言,有若多個程式同時進行。
 即時作業:將優先權調到最高, CPU立即處理。
 批次作業:將數個程式放在一起,等到CPU有時間再一次處理。
 Spooling作業:先將I/O需要存取的資料放到硬碟上,以節省CPU對
I/O的存取時間。
Process and Thread
一件工作(Job),可分為數個處理單元(Process),而每個處理單元又可
 分為數個線索(Thread)。一件工作至少需要一個線索。

處理單元是「軟體觀念」上的分割。是工作(Job)的一個處理基本單位,
 其狀態可分為五種:新工作(New),預備(Ready),執行(Run),等待
 (Wait),結束(Complete)。

線索是「硬體觀念」上的分割。是CPU的一個處理基本單位,內含獨立的
 程式計數器,暫存器及堆疊。




             在電腦上按Ctrl-Alt-Del可見處理程序
複習
簡答:
連線作業、離線作業、緩衝區作業、分時作業、多程式作業、即時作業、批次作
  業、 Spooling作業



請解釋Process與Thread的差別 。
處理單元之狀態
執行狀態(Running State):CPU正在執行處理單元。
預備狀態(Ready State):執行程式單元等待CPU來執行
等待狀態(Blocked State or Wait State):等待某一事件完成,通常為
 I/O事件。

                                      Complete
                    Running

                                    Blocked
              Time out
        New              Dispatch
                                        Blocked
                    Ready Wakeup
                                                   Resume

              Suspend    Resume          Suspend   Suspend
                                                   Blocked
                   Suspend
                    Ready
處理單元之狀態
OS 將尚未載入
 記憶體的工作           由長程排班器(Long-
(JOB)記錄到磁         Term Scheduler)將工
  碟工作區中           作(Job)從硬碟載入到
                       記憶體中
            新工作



                                            Complete
                          Running

                                          Blocked
                    Time out
            New                Dispatch
                                              Blocked
                          Ready Wakeup
                                                         Resume

                   Suspend     Resume          Suspend   Suspend
   預備狀態                                                  Blocked
                         Suspend
                          Ready
處理單元之狀態
                                              短程排班器(Short-
                                             Term Scheduler)將
                                              CPU的使用時間交
             執行中狀態                            給預備佇列(Ready
                                             List)中的某一處理單
       新工作                                        元(Process)
                                                                     完成狀態


                   Running                        Complete

                                   Blocked
       New   Time out   Dispatch                                等待 狀態(Blocked)

                                       Blocked
                   Ready Wakeup
                                                    Resume

             Suspend    Resume          Suspend    Suspend
預備狀態                                               Blocked
                  Suspend
                   Ready                                                暫停的等
                                       暫停的等                             待 狀態
                                       待 狀態
處理單元之狀態
在分時系統(Time Sharing
 System)內,若處理單元
(Process)的CPU分配時段
 結束,系統會產生一個中
斷,讓OS將處理單元移回
       預備佇列




                                             Complete
                           Running

                                           Blocked
                     Time out
          New                   Dispatch
                                               Blocked
                           Ready Wakeup
                                                          Resume

                     Suspend    Resume          Suspend   Suspend
                                                          Blocked
                          Suspend
                           Ready
處理單元之狀態
                                                     等待 狀態(Blocked),等待
                                                     的原因:等待I/O,或執行
                                                         到wait()指令




                              Complete
            Running

                            Blocked
      Time out
New              Dispatch
                                Blocked
            Ready Wakeup
                                           Resume

      Suspend    Resume          Suspend   Suspend
                                           Blocked
           Suspend
            Ready
處理單元之狀態
                              Complete
            Running

                            Blocked
      Time out
New              Dispatch
                                Blocked
            Ready Wakeup
                                           Resume

      Suspend    Resume          Suspend   Suspend
                                           Blocked
           Suspend
            Ready




                                           睡醒 狀態(Wakeup),睡醒
                                           的原因:已完成I/O指令,
                                            或執行到Signal()指令
處理單元之狀態
                                                 處理單元(process)執行完
                                                 畢,或使用者中止該處理單
                                                 元,或處理單元發生錯誤




                              Complete
            Running

                            Blocked
      Time out
New              Dispatch
                                Blocked
            Ready Wakeup
                                           Resume

      Suspend    Resume          Suspend   Suspend
                                           Blocked
           Suspend
            Ready
處理單元之狀態
                              Complete
            Running

                            Blocked                  解除暫停
      Time out
New              Dispatch
                                Blocked
            Ready Wakeup
                                           Resume

      Suspend    Resume          Suspend   Suspend
                                           Blocked
           Suspend
            Ready
                                                       暫停的等
                                                       待 狀態




            暫停 狀態(suspend),可能的原
            因:系統失常,或工作量太大需
             要暫停一些處理單元的執行
複習
簡答:
執行狀態、預備狀態、等待狀態



請畫出處理單元之狀態圖,並說明之。
Preemptive and Nonpreemptive

Preemptive: 可搶先。作業系統允許一個執行中的處理單元
  可以被一個優先權較高的處理單元暫時停止執行,等到優
  先權較高的處理單元執行完畢後,再恢復執行。



Nonpreemptive: 不可搶先。
中斷
中斷:改變執行流程的事件。

1.   作業系統取得控制權。
2.   作業系統將被中斷的處理單元的狀態儲存到處理單元控制區塊(PCB)
     中。
3.   執行中斷處理程式。
4.   取回處理單元控制區塊(PCB)的狀態,並恢復執行被中斷的程式。
處理單元控制區塊(PCB)

處理單元的目前狀態(Running,Ready,Blocked…)
處理單元的識別名稱
處理單元的排班資訊
處理單元的記憶體指標
處理單元已分配的資源指標
處理單元的記憶體內容(暫存器、堆疊…)
處理單元的已執行的時間
排班程式
長程排班:决定那一個程式由硬碟載入到記憶體中。
中程排班:决定那一個程式由記憶體暫存到硬碟中。
短程排班:决定那一個程式由主記憶體中載入到CPU中。



       Input/output    輸出入等待佇列
                      (I/O Waiting Queue)


                           預備佇列
長程排程                                                        CPU          執行完畢
                        (Ready Queue)       短程排程



                                未執行完畢的處理單元
                             (Partially Executed Process)         中間排程
排班程式
CPU使用率:


                          CPU執行處理單元所佔用的時間
          CPU使用率 =                              *100%
                     CPU執行處理單元所佔用的時間 + CPU閒置的時間




生產量:(Throughput):單位時間內完成處理單元的數量。
返轉時間(Turnaround Time):一個處理單元由進入到系統到處理完畢所需要的時間。
回應時間(Respond Time):一個處理單元由進入到系統到第一次產生輸出所需要的時間。
等待時間(Waiting Time):一個處理單元在佇列中等待的時間。
排班程式
先到先服務 FCFS(First Come First Serve):有若排隊,先到的程式先
 執行,後到的程式後執行。




             A                     B              C

     0                 22                    26       35


                              0 + 22 + 26
                  平均等待時間 =                = 16
                                   3


                            22 + 26 + 35
                 平均返轉時間 =                = 27.6
                                 3
排班程式
巡迴服務 RR(Round Robin):有若排隊,先到的程式先執行,後到的程
 式後執行。但多了配額時間(Time Quantum),在時間用完後,若程式
 尚未執行完畢,則必需重新排隊。例如:有三個程式A, B, C,執行
 時間分別為18,6,3,則排班如下:


             A       B       C      A       B        A        A        A

         0       4       8   11         15 17            21       25       27


                                 0 + 4 + 8 + (11 − 4) + (15 − 8) + (17 − 15)
             平均等待時間 =                                                        = 9 .3
                                                      3


                                                27 + 17 + 11
                         平均返轉時間 =                            = 18.3
                                                     3
複習
簡答:
Preemptive,Nonpreemptive,中斷,處理單元控制區塊(PCB),長程排班,
  中程排班,短程排班, CPU使用率,生產量,返轉時間,回應時間,
  等待時間,先到先服務,巡迴服務



請畫出排班程式的流程圖,並說明之。
死結狀態
程式等待一個永遠不會發生的事件,無法向
 下繼續執行,如同當機。


                 硬碟機


        程式 A              程式B



                  光碟機



例如:程式A已經有了硬碟機,又要求使用光碟機。光碟機目前被程式B佔用,而且程式B要求使
用已被程式A佔用硬碟機。
死結的四個必要條件
互斥條件:若某甲使用,則某乙就不能使用。反之,若某乙使用,
則某甲就不能使用。
等待條件:電腦已經佔用資源(記憶體、光碟機、硬碟機、軟碟機、
鍵盤…),同時又要求佔用其他資源。
不可搶用條件:不可搶行要求其他程式讓出資源以供自己使用。
循環等待條件:程式相互等待被對方佔用的資源。




              必要條件:通通都要發生,缺一不可。
死結的避免
處理單元在執行前先聲明所需資源最大需求
 量,利用銀行家演算法,以避免循環等
 待。
死結的避免

         處理單元的需求量




 安全狀態               不安全狀態
         銀行家演算法




分配資源                 等待狀態
死結的避免
                Allocation               Max
Process
            A        B       C   A        B          C

   1        1        2       0   6        7          2

   2        4        0       1   4        2          2

   3        0        3       2   8        3          2

   4        1        1       2   3        1          2

   5        2        0       0   3        4          3

A, B, C的資源數量分別為12, 7, 9              Allocation: 已分配的資源數量
                                     Max: 最大資源需求量
                                     Process: 處理單元
死結的避免
Available[A]=12-(1+4+1+2)=4
Available[B]=7-(2+3+1)=1
Available[C]=9-(1+2+2)=4


               Need           發現只要低於4-1-4,即為安全狀態
 Process
           A    B     C       所以執行順序為2-4-5-3-1
    1      5    5     2
    2      0    2     1
    3      8    0     0
    4      2    0     0
    5      1    4     3




                                       Available: 尚未分配的資源
                                        Need: 等待的資源數量
死結的避免
                           Allocation                            Max
    Process
                   A           B        C         A               B    C
       1           1           2        0         6               7    2
       2           4           0        1         4               2    2
       3           0           3        2         8               3    2
       4           1           1        2         3               1    2
       5           2           0        0         3               4    3


Available[A]=12-(1+4+1+2)=4
Available[B]=7-(2+3+1)=1                                  Need
                                            Process
Available[C]=9-(1+2+2)=4                              A    B     C
                                              1       5    5     2
                                              2       0    2     1
                                              3       8    0     0
                                              4       2    0     0
                                              5       1    4     3
記憶體碎片
何謂記憶體碎片(Fragmentation)?
記憶體碎片是一塊記憶體的區塊,無法容納想要載入的程式,形成一種
 浪費。



                    程式A
          程式                前面結束的
                    浪費
                            程式所留下


在一般的情形              程式B
下程式碼都無    浪費
法剛好填滿所
配置的區塊    內部碎片      外部碎片




         磁碟重組工具
虛擬記憶體
何謂虛擬記憶體(Virtual Memory)?
一種可以讓主記憶體與硬碟交換程式的技術,將目前不被執行的檔案區
 塊由主記憶體暫存到硬碟中,留出空位,載入欲執行的程式區塊,以
 便讓電腦可以執行比主記憶體大的程式。




       Ctrl-Alt-Del 工作管理員→效能
分頁系統
將實際記憶體(Physical Memory)分成固定大小的
區塊(Block),每一個區塊稱為一個頁幅
(Frame)。

將邏輯記憶體(Logical Memory)分成同樣固定大
小的區塊,每一個區塊稱為一個頁(Page)。

頁與頁幅相互對映。
分頁系統
分頁系統需要有一個「頁映成表」 (Page Map
 Table,PMT)來處理「動態位址轉換」 (Dynamic
 Map Table,DAT)。

頁映成表需要有一個「頁映成表基底暫存器」(Page
 Map Table Base Register,PMTBR)儲存頁映成表
 的起始位址。
頁映成表
          索引   頁幅編號   頁幅位址    PRB
          0     2      F800    1
          1     4      D300    0
          2     1      EF00    1


頁映成表的內容:

頁駐存位元(Page Resident Bit),若為1,則表示此頁儲
存在記憶體中,若為0,則表示此頁儲存在次記憶體中。
此頁在記憶體中的位址(頁幅位址)。
此頁在記憶體中的頁幅編號。
由邏輯記憶體所計算出來的索引值。
分頁記憶體管理
              邏輯位址
  CPU         p   d                                      OS

                               Base
                                            實際位址

                               p              f     d
  Base        ⊕
頁映成表基底
 暫存器
                      f   f'
                                                        實際記憶體
    A→ 邏輯位址
    q→頁的大小                            p = A div q
                      頁映成表
    p→頁數                              d = A mod q
    d→位移量

                      div→取整數型式的商數。 mod→取餘數。
分頁記憶體管理
高位元          低位元
部分           部分
                                                頁幅   實際位址    資料
                            索引      頁幅                0
 頁     頁位移     資料            0          2       0     1
        0      D0            1          4             2
 0      1      D1            2          1             3      D6
        2      D2                               1     4      D7
                                 頁映成表
        3      D3                                     5      D8
 1      4      D4                                     6      D0
        5      D5                               2     7      D1
        6      D6                                     8      D2
 2      7      D7                                     9
        8      D8                               3     10

      邏輯記憶體                 頁映成表本身為一                  11
                              張對照表                    12     D3

     原始程式                                       4     13     D4
                                                      14     D5

              若4KB為一頁的話,則低位元的12bit會形成頁位移             實際記憶體
              (offset),而高於12bit的部分會形成頁(page)。
分頁記憶體管理
頁     頁位移      資料              索引      頁幅
        0       D0              0          2   頁幅   實際位址    資料
 0      1       D1              1          4         0
        2       D2              2          1   0     1
        3       D3                  頁映成表             2
 1      4       D4                                   3      D6
        5       D5                             1     4      D7
        6       D6                                   5      D8
 2      7       D7                                   6      D0
        8       D8                             2     7      D1

     邏輯記憶體                                           8      D2
                                                     9
若每頁的大小為4個字組(Word),若資料D5的位址為5,頁映成表基
                                               3     10
底暫存器值=0,計算頁與頁位移如下:
                                                     11
p = 5 div 4 = 1 (商數為頁) (div為整數除法)
                                                     12     D3
d = 5 mod 4 = 1 (餘數為頁位移) (mod 為求餘數)
                                               4     13     D4
p + b = p + 0 = 1 (求出索引值)                            14     D5
由索引值知道資料放在第四頁中,再由頁位移加上頁映成表中所記錄
                                                    實際記憶體
的頁幅的基底位址(起始位址),可得知實際位址。
複習
何謂死結?其避免的方法有那些?
何謂虛擬記憶體(Virtual Memory)?
何謂記憶體碎片(Fragmentation)?
請畫圖說明分頁記憶體管理的工作方式。
表格碎片
頁映成表本身需要使用記憶體,使得其他程
 式不能使用被其佔用的記憶體。
頁的大小
頁不能太大:內部碎片會增加,且移入移出
 較為費時。

頁不能太小:頁映成表所佔用的記憶體會增
 加,且移入移出的次數會增加, 效能下
 降。
頁映成表的型式
直接映成(Direct Mapping)
聨合映成(Associative Mapping)
聨合/直接映成(Associative/ Direct Mapping)
直接映成
          邏輯位址
  CPU      p   d                              OS

                             Base
                                    實際位址

                             p      f'   d
  Base    ⊕
頁映成表基底
 暫存器
                    f   f'
                                             實際記憶體


                   頁映成表

   利用頁映成表基底暫存器找出頁映成表所在的地方,再由邏輯位址中的頁數找出相對應的實際記憶體
   的頁數。實際記憶體的位移量仍引用原來的邏輯位址位移量。
聨合映成
           邏輯位址
CPU        p   d                          OS



                              實際位址

                              f   d




      搜尋           f   f'
                                        實際記憶體


                   頁映成表

頁映成表置於快取記憶體中,利用搜尋的方式,找出相對應的實際記憶體的頁數。 實際記憶體的位移
量仍引用原來的邏輯位址位移量。
聨合/直接映成
          邏輯位址
                   搜尋
  CPU      p   d                             OS

                             Base
                                    實際位址

                             p      f   d
  Base    ⊕
頁映成表基底
 暫存器
                    f   f'
                                            實際記憶體


                   頁映成表

   先到快取記憶體中找出相對應的實際記憶體的頁數,若找到,則使用之。若找不到,才利用頁映成表
   基底暫存器找出頁映成表所在的地方,再由邏輯位址中的頁數找出相對應的實際記憶體的頁數。實際
   記憶體的位移量仍引用原來的邏輯位址位移量。
最久未用頁取代法(LRU)

    1           2           3           4           5           6           7           8           9            10            11            12
    A           B           C           D           C           A           A           D           B            B             E             C
A       1   A       1   A       1   D       4   D       4   D       4   D       4   D       8   D       8    D        4    E        11   E        11

            B       2   B       2   B       2   B       2   A       6   A       7   A       7   A       7    A        7    A        7    C        21

                        C       3   C       3   C       5   C       3   C       3   C       3   B       9    B        01   B        01   B        01




最久未用頁取代法(Least Recently Used):依照記錄的時間,將最近不常用的頁更換掉。為較常用的方法。


                                                                                                            時間



                                                                                                    欲使用的頁
最久未用頁取代法(LRU)

    1           2           3           4           5
    A           B           C           A           D
A       1   A       1   A       1   A       4   A       4
            B       2   B       2   B       2   D       5
                        C       3   C       3   C       3




                與上例比較,若D在加入前,A又被使用一次,則B將被替換。
磁片格式

  磁軌




       磁區




   有四個磁軌,每個磁軌有四個磁區。
磁片
若有一片磁片正反面都可使用,每面有40個磁軌,每分鐘轉5400次,每
 秒傳輸速率為90000位元組,試求此磁片可容納多位元組?

                    5400
          每秒轉動次數 =        = 90(次 / 秒)
                      60
                         90000
          每次送出的位元組 =           = 1000(位元組 / 次)
                           90
          此一1000(位元組 / 次)即為每個磁軌的容量
          總共容量 = 1000 * 40 * 2 = 80000(位元組)
複習
何謂表格碎片?
試述頁的大小為何不能太大或太小?
何謂最久未用頁取代法(LRU) ?
請畫圖說明直接映成(Direct Mapping)、聨合映成(Associative
 Mapping)、聨合/直接映成(Associative/ Direct Mapping)。
若有一片磁片正反面都可使用,每面有40個磁軌,每分鐘轉5400次,每
 秒傳輸速率為90000位元組,試求此磁片可容納多位元組?
課程結束
謝謝!

More Related Content

What's hot (20)

Python變數與資料運算
Python變數與資料運算Python變數與資料運算
Python變數與資料運算
 
第9章 transact sql程序设计
第9章   transact sql程序设计第9章   transact sql程序设计
第9章 transact sql程序设计
 
建置Python開發環境
建置Python開發環境建置Python開發環境
建置Python開發環境
 
C程式-陣列與指標
C程式-陣列與指標C程式-陣列與指標
C程式-陣列與指標
 
第6章指针
第6章指针第6章指针
第6章指针
 
Python程式設計 - 分支作業
Python程式設計 - 分支作業Python程式設計 - 分支作業
Python程式設計 - 分支作業
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
Python元組,字典,集合
Python元組,字典,集合Python元組,字典,集合
Python元組,字典,集合
 
Slide08 807007748
Slide08 807007748Slide08 807007748
Slide08 807007748
 
Python程式設計 - 迴圈作業
Python程式設計 - 迴圈作業Python程式設計 - 迴圈作業
Python程式設計 - 迴圈作業
 
Python程式設計 - 串列資料應用
Python程式設計 - 串列資料應用 Python程式設計 - 串列資料應用
Python程式設計 - 串列資料應用
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
Python系列2
Python系列2Python系列2
Python系列2
 
所谓闭包
所谓闭包所谓闭包
所谓闭包
 
Erlang培训
Erlang培训Erlang培训
Erlang培训
 
Python分支作業
Python分支作業Python分支作業
Python分支作業
 
12
1212
12
 
17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)
 
实验一 Mathematica软件简介
实验一   Mathematica软件简介实验一   Mathematica软件简介
实验一 Mathematica软件简介
 
Ch07
Ch07Ch07
Ch07
 

Similar to 系統程式

第2章数据类型、运算符和表达式
第2章数据类型、运算符和表达式第2章数据类型、运算符和表达式
第2章数据类型、运算符和表达式summerfeng
 
Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_vinsin27
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式1138177709
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成tjpucompiler
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門吳錫修 (ShyiShiou Wu)
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探Sean Yu
 
管理資訊系統之資訊架構
管理資訊系統之資訊架構管理資訊系統之資訊架構
管理資訊系統之資訊架構5045033
 
Js is js(程劭非) (1)
Js is js(程劭非) (1)Js is js(程劭非) (1)
Js is js(程劭非) (1)looneyren
 
第2章符 号 运 算
第2章符 号 运 算第2章符 号 运 算
第2章符 号 运 算eterou
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhouWill Zhou
 
实验一 Mathematica软件简介
实验一   Mathematica软件简介实验一   Mathematica软件简介
实验一 Mathematica软件简介Xin Zheng
 
C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序yiditushe
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Derek Lee
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline斯理 衛
 
05 计算机的运算方法02
05 计算机的运算方法0205 计算机的运算方法02
05 计算机的运算方法02Huaijin Chen
 
Php extension开发
Php extension开发Php extension开发
Php extension开发thinkinlamp
 

Similar to 系統程式 (20)

第1章 概论
第1章 概论第1章 概论
第1章 概论
 
第2章数据类型、运算符和表达式
第2章数据类型、运算符和表达式第2章数据类型、运算符和表达式
第2章数据类型、运算符和表达式
 
Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_Rde packagean zhuang_ji_ji_ben_cao_zuo_
Rde packagean zhuang_ji_ji_ben_cao_zuo_
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探
 
管理資訊系統之資訊架構
管理資訊系統之資訊架構管理資訊系統之資訊架構
管理資訊系統之資訊架構
 
Js is js(程劭非) (1)
Js is js(程劭非) (1)Js is js(程劭非) (1)
Js is js(程劭非) (1)
 
Arduino程式快速入門
Arduino程式快速入門Arduino程式快速入門
Arduino程式快速入門
 
第2章符 号 运 算
第2章符 号 运 算第2章符 号 运 算
第2章符 号 运 算
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
实验一 Mathematica软件简介
实验一   Mathematica软件简介实验一   Mathematica软件简介
实验一 Mathematica软件简介
 
C语言学习100例实例程序
C语言学习100例实例程序C语言学习100例实例程序
C语言学习100例实例程序
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
C語言應用前置處理
C語言應用前置處理C語言應用前置處理
C語言應用前置處理
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline
 
05 计算机的运算方法02
05 计算机的运算方法0205 计算机的运算方法02
05 计算机的运算方法02
 
Php extension开发
Php extension开发Php extension开发
Php extension开发
 

系統程式