楊 磊 殷兆麟
摘要:計(jì)算機(jī)教育專(zhuān)家按計(jì)算機(jī)專(zhuān)業(yè)從業(yè)人員解決問(wèn)題的空間、要求的知識(shí)結(jié)構(gòu)及其人才培養(yǎng)的課程設(shè)置把計(jì)算機(jī)專(zhuān)業(yè)人才培養(yǎng)分為四類(lèi):計(jì)算機(jī)科學(xué)與技術(shù)、計(jì)算機(jī)工程、軟件工程、信息技術(shù)。信息技術(shù)人才是國(guó)民經(jīng)濟(jì)需要最多的人才,本文通過(guò)分析信息技術(shù)類(lèi)人才的特點(diǎn),提出信息技術(shù)方向應(yīng)選擇Java作為主流語(yǔ)言,進(jìn)而施行操作系統(tǒng)實(shí)驗(yàn)的改革。
關(guān)鍵詞:分類(lèi)培養(yǎng);信息技術(shù);計(jì)算機(jī)語(yǔ)言;操作系統(tǒng)
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
1信息技術(shù)類(lèi)人才特點(diǎn)
計(jì)算機(jī)專(zhuān)業(yè)人才分類(lèi)培養(yǎng)的目的是合理設(shè)置不同分類(lèi)人才培養(yǎng)的課程體系,構(gòu)建不同分類(lèi)人才的知識(shí)結(jié)構(gòu)、素質(zhì)要求、專(zhuān)業(yè)能力。逐步改變目前課程偏多、內(nèi)容偏舊、專(zhuān)業(yè)不專(zhuān)、能力不強(qiáng)、人才市場(chǎng)適應(yīng)性差的局面。信息技術(shù)人才是我國(guó)大量需要的計(jì)算機(jī)專(zhuān)業(yè)人才。信息技術(shù)從業(yè)人員解決的核心問(wèn)題空間、需要的知識(shí)體結(jié)構(gòu)分別如圖1 、圖2所示。
傳統(tǒng)的計(jì)算機(jī)應(yīng)用專(zhuān)業(yè)、近幾年新增的電子商務(wù)技術(shù)專(zhuān)業(yè)、電子政務(wù)技術(shù)、網(wǎng)絡(luò)工程專(zhuān)業(yè)、企業(yè)信息管理系統(tǒng)等大都?xì)w于“信息技術(shù)”方向,其人才的知識(shí)體結(jié)構(gòu)可以借鑒“信息技術(shù)”人才知識(shí)結(jié)構(gòu)。由圖1、圖2可以看出信息技術(shù)從業(yè)人員解決的問(wèn)題空間傾向于應(yīng)用,大量的需要解決的問(wèn)題涉及的是組織系統(tǒng)的行為、應(yīng)用技術(shù)、軟件開(kāi)發(fā)。顯然,這種知識(shí)結(jié)構(gòu)與傳統(tǒng)的計(jì)算機(jī)應(yīng)用專(zhuān)業(yè)是不同的,它突出了“應(yīng)用”。
2信息技術(shù)類(lèi)人才的語(yǔ)用能力
當(dāng)今計(jì)算機(jī)應(yīng)用從系統(tǒng)行為分析、系統(tǒng)邏輯設(shè)計(jì)到系統(tǒng)實(shí)現(xiàn)都和計(jì)算機(jī)語(yǔ)言密切聯(lián)系在一起。支持軟件系統(tǒng)建模的UML語(yǔ)言,它可以描述系統(tǒng)分析與設(shè)計(jì),面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(C++、Java、C#)、支持Web應(yīng)用的HTML語(yǔ)言、腳本語(yǔ)言(Script等)、網(wǎng)絡(luò)數(shù)據(jù)表達(dá)語(yǔ)言XML、動(dòng)態(tài)網(wǎng)頁(yè)語(yǔ)言(JSP、ASP.Net)是當(dāng)今實(shí)現(xiàn)應(yīng)用系統(tǒng)的主要語(yǔ)言。如果把這些語(yǔ)言和圖1和圖2聯(lián)系起來(lái),也就是說(shuō)把信息技術(shù)方向人才的核心問(wèn)題空間與解決問(wèn)題主要選擇的語(yǔ)言聯(lián)系起來(lái),我們得到圖3 。這里僅列舉了當(dāng)代IT使用最廣、最有代表性的語(yǔ)言。從圖3可以看出:信息技術(shù)方向從業(yè)人員一般選擇Java、C#、UML、XML,一般選擇基于Web的框架,它成為從事信息技術(shù)人才必備語(yǔ)言。
當(dāng)今一門(mén)語(yǔ)言往往與一種IT理論與技術(shù)體系聯(lián)系在一起,C#和Windows 操作系統(tǒng)、.Net可視化開(kāi)發(fā)環(huán)境密不可分;Java語(yǔ)言和J2SE、J2EE、J2ME及其集成開(kāi)發(fā)環(huán)境聯(lián)系在一起;語(yǔ)用能力成了專(zhuān)業(yè)能力特色的體現(xiàn)。這樣一來(lái),對(duì)于計(jì)算機(jī)專(zhuān)業(yè)語(yǔ)言教學(xué)面臨如何最優(yōu)地選擇一種語(yǔ)言作為主流語(yǔ)言,即作第一語(yǔ)言、它涉及后續(xù)專(zhuān)業(yè)基礎(chǔ)課程、專(zhuān)業(yè)課程的教學(xué)。
我國(guó)多數(shù)高校計(jì)算機(jī)專(zhuān)業(yè)以往不管什么人才培養(yǎng)方向,一般開(kāi)設(shè)的第一門(mén)語(yǔ)言是C或C++。目前越來(lái)越多高校計(jì)算機(jī)專(zhuān)業(yè)信息技術(shù)方向選擇Java語(yǔ)言或C#作為主流語(yǔ)言,許多專(zhuān)家在探索Java或C#作主流語(yǔ)言的“操作系統(tǒng)”的教學(xué)改革。
3信息技術(shù)方向“操作系統(tǒng)”實(shí)驗(yàn)的改革
選擇Java語(yǔ)言作為信息技術(shù)方向主流語(yǔ)言就必須研究、實(shí)踐“操作系統(tǒng)”等課程實(shí)驗(yàn)如何利用Java開(kāi)發(fā)環(huán)境來(lái)完成。由圖2看出,信息技術(shù)方向的操作系統(tǒng)的內(nèi)容包含在“平臺(tái)技術(shù)”中。平臺(tái)技術(shù)是支持“應(yīng)用”必須技術(shù)的有機(jī)集合。這里指的必須技術(shù)主要包括計(jì)算機(jī)硬件系統(tǒng)、操作系統(tǒng)、中間件技術(shù)。這里講授的平臺(tái)技術(shù)應(yīng)該是為理解、開(kāi)發(fā)、維護(hù)“應(yīng)用”的專(zhuān)業(yè)基礎(chǔ)理論與技術(shù)。為了節(jié)約篇幅,下面以java.util.concurrent 包為例描述它支持操作系統(tǒng)的進(jìn)程、線程管理(并行計(jì)算)實(shí)驗(yàn)。
操作系統(tǒng)的進(jìn)程、線程管理涉及中斷、原語(yǔ)、進(jìn)程(線程)、互斥、同步、進(jìn)程(線程)調(diào)度等重要概念,java.util.concurrent 包可以說(shuō)是上述概念的Java抽象。
(1) 原子變量
java.util.concurrent.atomic包含原子變量類(lèi)。它支持讀取和寫(xiě)入原子變量與讀取和寫(xiě)入對(duì)一般變量的訪問(wèn)具有相同的存取語(yǔ)義。 原子變量的操作會(huì)變?yōu)槠脚_(tái)提供的用于并發(fā)訪問(wèn)的原語(yǔ)。原子變量屏蔽變量操作中斷,降低鎖定對(duì)象的粒度。中斷是把單CPU虛擬成多CPU的物理?xiàng)l件,是程序并發(fā)的基礎(chǔ),也是導(dǎo)致破壞順序程序封閉性的直接原因。
(2) 互斥機(jī)制
java.util.concurrent.locks包提供了鎖類(lèi)或接口,Lock接口的主要實(shí)現(xiàn)是ReentrantLock,它是指可重入的鎖,多個(gè)線程可以并發(fā)對(duì)鎖發(fā)出請(qǐng)求,但同一時(shí)刻只能有一個(gè)線程持有該鎖。一個(gè)ReentrantLock將被最近成功獲得鎖,且還沒(méi)有釋放的線程所擁有。當(dāng)鎖沒(méi)有被其它線程占有時(shí),一個(gè)申請(qǐng)鎖的線程將成功獲得鎖并返回,可以通過(guò)isHeldByCurrentThread和getHoldCount方法來(lái)檢查此情況是否發(fā)生。
該類(lèi)的構(gòu)造方法接收一個(gè)可選的參數(shù):fairness(表示公平地分配鎖)。當(dāng)設(shè)置fairness為true(即采用公平分配鎖的方式)時(shí),在多個(gè)線程的爭(zhēng)奪下,獲取鎖的訪問(wèn)將花費(fèi)很長(zhǎng)時(shí)間。否則該鎖將無(wú)法保證任何有序的訪問(wèn)。使用公平鎖(即使用公平的方式分配鎖)開(kāi)發(fā)的程序在多線程并發(fā)訪問(wèn)時(shí)與采用默認(rèn)的設(shè)置(使用不公平鎖)相比,表現(xiàn)為很低的吞吐量,但是有時(shí)在獲取鎖和保證鎖分配的均衡性時(shí)有些小的差異。公平鎖不能保證線程的計(jì)劃性和有序性。例如,一個(gè)在許多使用公平鎖的線程中的一員可能獲得多倍的獲得鎖的機(jī)會(huì),這種情況發(fā)生在其它激活線程沒(méi)有被處理而且不持有鎖時(shí)。
ReadWriteLock接口定義的鎖可以在讀者之間共享,但與寫(xiě)者互斥。它只有一個(gè)實(shí)現(xiàn)ReentrantReadWriteLock.
Condition接口描述了與鎖相關(guān)的條件變量,可能多個(gè)條件對(duì)應(yīng)一鎖。
AbstractQueuedSynchronizer類(lèi)是定義依賴(lài)阻塞隊(duì)列線程的鎖和其它同步的父類(lèi)。
(3) 同步接口
Sync接口提供獲取acquire()、嘗試attempt()、釋放release()方法,以便實(shí)現(xiàn)同步操作,以實(shí)現(xiàn)更加靈活的代碼同步。Sync接口至少要提供acquire() 和release() 兩種方法。試圖占有Sync對(duì)象的線程調(diào)用acquire()方法,然后等待,直到輪到它們掌控Sync對(duì)象。處理完畢后,占有Sync的線程必須調(diào)用sync上的release()方法。Sync接口與其實(shí)現(xiàn)類(lèi)的類(lèi)圖如圖4所示。
當(dāng)多個(gè)線程同時(shí)在等待獲取Sync接口時(shí),線程占有權(quán)的最后次序取決于被選Sync的實(shí)現(xiàn)。Sync接口上線程占有權(quán)的策略包括先到先服務(wù)(first come first served,FCFS)和基于線程優(yōu)先級(jí)(thread priority based)。Sync也可以定義attempt()方法,它考慮了線程等待Sync的最大持續(xù)時(shí)間。
Semaphore:可用于pool類(lèi)實(shí)現(xiàn)資源管理限制。提供了acquire()方法,允許在設(shè)定時(shí)間內(nèi)嘗試鎖定信號(hào)量,若超時(shí)則返回false。
Mutex:Mutex對(duì)象可以作為參數(shù)在方法間傳遞,所以可以把同步代碼范圍擴(kuò)大到跨方法甚至跨對(duì)象。
NullSync:其方法的內(nèi)部實(shí)現(xiàn)都是空的,可能是作者認(rèn)為如果你在實(shí)際中發(fā)現(xiàn)某段代碼根本可以不用同步,但是又不想過(guò)多改動(dòng)這段代碼,那么就可以用NullSync來(lái)替代原來(lái)的Sync實(shí)例。此外,由于NullSync的方法都是synchronized,所以還是保留了“內(nèi)存壁壘”的特性。
ObservableSync:把sync和observer模式結(jié)合起來(lái),當(dāng)sync的方法被調(diào)用時(shí),把消息通知給訂閱者。
TimeoutSync:可以認(rèn)為是一個(gè)adaptor,可以位于Sync的外層,實(shí)現(xiàn)上鎖超時(shí)控制的類(lèi),其構(gòu)造函數(shù)如下:public TimeoutSync(Sync sync, long timeout){…}。
(4)Executor/ThreadFactory接口
該把相關(guān)的線程創(chuàng)建/回收/維護(hù)/調(diào)度等工作封裝起來(lái),而讓調(diào)用者只專(zhuān)心于具體任務(wù)的編碼工作(即實(shí)現(xiàn)Runnable接口),不必顯式創(chuàng)建Thread類(lèi)實(shí)例就能異步執(zhí)行任務(wù)。
使用Executor還有一個(gè)好處,就是實(shí)現(xiàn)線程的“輕量級(jí)”使用, 包括線程池,任務(wù)隊(duì)列等。
ThreadFactory主要實(shí)現(xiàn)有: ThreadFactoryUser.Default ThreadFactory。
類(lèi)關(guān)系圖如圖5所示。
java.util.concurrent除包含上述支持同步計(jì)算的類(lèi)外,它還包括其他層次更高的線程同步類(lèi)。不難看出利用java.util.concurrent包認(rèn)真選擇、設(shè)計(jì),完全可以完成操作系統(tǒng)的并行計(jì)算部分的實(shí)驗(yàn)。同時(shí)這個(gè)過(guò)程也是提高學(xué)生面向?qū)ο蠓治?、設(shè)計(jì)、實(shí)現(xiàn)的過(guò)程,提高Java語(yǔ)言應(yīng)用能力的過(guò)程。
同樣利用Java可以很好地支持操作系統(tǒng)文件管理實(shí)驗(yàn)。
4總結(jié)
計(jì)算機(jī)專(zhuān)業(yè)人才分類(lèi)培養(yǎng)是提高計(jì)算機(jī)專(zhuān)業(yè)人才質(zhì)量的需要。信息技術(shù)人才是國(guó)民經(jīng)濟(jì)需要最多的人才,信息技術(shù)人才培養(yǎng)應(yīng)該按自己需要選擇主流語(yǔ)言,Java語(yǔ)言信息技術(shù)人才的主流語(yǔ)言,有利于掌握J(rèn)ava技術(shù),也完全滿足信息技術(shù)人才操作系統(tǒng)實(shí)驗(yàn)需要。
參考文獻(xiàn):
[1] 教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會(huì).高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)發(fā)展戰(zhàn)略研究報(bào)告暨專(zhuān)業(yè)規(guī)范(試行)[M]. 北京:高等教育出版社,2006.
[2] 殷兆麟,姜利群,朱長(zhǎng)征. 面向?qū)ο笳Z(yǔ)言教學(xué)中一些問(wèn)題的探討[C]//全國(guó)計(jì)算機(jī)課程教學(xué)改革論壇論文集.北京:高等教育出版社,2005.
[3] 殷兆麟,張永常,范寶德,等. 以創(chuàng)新精神貫徹“高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)發(fā)展戰(zhàn)略研究報(bào)告暨專(zhuān)業(yè)規(guī)范”[C]//全國(guó)計(jì)算機(jī)課程教學(xué)改革論壇論文集.北京:高等教育出版社,2006.