※ 引述《gsj.bbs@bbs.nchu.edu.tw (國王的新衣)》之銘言:
> ※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言:
> > 電腦在執行中斷與多工程式時, 就時間順序言, 就是非循序的.
> > 那麼你的循序與非循序跟硬體的對稱又是指甚麼 ?
> 我的循序是指 "行程內" 的循序
> 行程間也是有一個順序規則的
> Process 的執行順序會由Scheduler 來排定
> (這些東西已經算是OS的議題了,詳情去看看教科書吧)
> 至於Interrupt 有的是隨機發生(如網路卡、Keyboard),有的是定時發生(如Timer)
> 但是ISR內部的執行也是循序
> 如果它有Task要註冊到Task Queue內執行,它也是循序的
> 電腦開機時的Initiator也是循序的
> 行程間的通訊,同步機制也是來自循序的要求
> 非循序,吵了半天的OO不就是
> 至於硬體
> CPU執行指令是一個接著一個,這就是循序運轉的機制
這邊有點怪怪的,
我用 C++ 的 OO + 其它 paradigm 寫純文字模式下的系統程式到現在,
都感覺不到什麼非循序執行的現象。
以傳統 OO 說的三種特性,封裝、繼承、多型,
這三樣東西並沒有改變程式是循序執行的現象,
某個 function 裡的程式碼被執行,
都是因為有 call function(或是對 function pointer 做 dereference)的動作,
除了 main() 之外其它都能在程式碼中找到蛛絲馬跡,
即使是多型衍生出來的「動態繫結」,
也不過就是一個 virtual function call。
至於 destructor 的呼叫雖然比較沒那麼明顯,
但是那也不過是編譯器在眾所皆知的地方插入呼叫動作的緣故。
就算真的如同前面板友說的,
你是把 event driven 跟 OO 搞混在一起的話(雖然我是不太相信),
event driven 也不過是註冊個 function pointer 進去,
讓那個 function pointer 在某個時機裡被明確的 dereference,
以 windows programming 來講那一行可能寫在 OS 裡面,
你不能說你看不到 OS 怎樣寫就說那是非循序執行。
這點跟 instruction service routine 相比其實差不多,
也是註冊好 routine address (function pointer) 在 interrupt vector,
OS/Monitor 接到硬體中斷的時候跑去查來 dereference 而已。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-140-247.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎