2014年3月16日 星期日

作業系統(恐龍本) 第一章整理(1)

整理1.1~1.3

-------------------------------------------------------------------------------------
1 Introduction

01.作業系統的目標(Operating system goals):
     -執行使用者的程式、解決使用者的問題
     -讓電腦系統方便的被使用
     -有效率的管理電腦硬體

-------------------------------------------------------------------------------------
1.1 What Operating Systems Do

02.電腦系統可被分為四個構成要素(Computer system can be divided into four components):
     -硬體
     -作業系統
     -應用程式
     -使用者(包含人、機器或其他電腦)

-------------------------------------------------------------------------------------
1.1.1 User View
1.1.2 System View

03.作業系統做什麼(What Operating Systems Do)
     -Depends on the point of view
           +User View
                 -Users want convenience, ease of use,Don’t care about resource utilization
                 -Handheld computers are resource poor, optimized for usability and
                   battery life
                 -......
           +System View
                 -作業系統是一個資源分配者(OS is a resource allocator)
                       +管理所有的資源
                       +當需求互相衝突時,決定資源要配給何者
                 -作業系統是一個控制程式(OS is a control program)
                       +管理使用者程式的執行,避免錯誤與不合適(errors and improper)的使用電腦

-------------------------------------------------------------------------------------
1.1.3 Defining Operating Systems

04.定義作業系統(Operating System Definition)
     -In general, we have no completely adequate definition of an operating system.
           +In addition,wehave no universally accepted definition of what is part of
              the operating system.
           +operating system is the one program running at all times on the computer
              called the kernel

-------------------------------------------------------------------------------------
1.2 Computer-System Organization

-------------------------------------------------------------------------------------
1.2.1 Computer-System Operation

05.電腦啟動
     -電腦啟動時bootstrap program會被載入到記憶體中
     -bootstrap program通常放在ROM或EPROM,作為韌體(firmware)存在
     -初始化系統的各個層面
           +初始化CPU的暫存器(CPU registers)
           +初始化裝置控制器(device controllers)
           +初始化記憶體的內容(memory contents)
     -載入並執行作業系統的核心(kernel)

06.中斷(interrupt) (p8)
     -軟體發出中斷
           +executing a special operation called a system call
     -硬體發出中斷
           +sending a signal to the CPU, usually by way of the system bus
     -中斷向量(interruptvector)

-------------------------------------------------------------------------------------
1.2.2 Storage Structure

07.Memory的種類
     -DRAM(dynamic random-access memory)
     -ROM(read-only memory)
           +因為ROM不能被修改,只有static的程式,像是開機程式被存在那
     -EEPROM(electrically erasable programmable read-only memory)
           +EEPROM無法被頻繁的修改,通常放著不易改變的程式,以智慧型手機來說,
            EEPROM存著原廠安裝的程式

08.Storage-device hierarchy
     -根據速度價錢以及volatile/nonvolatile,可由高到低排成這樣的層級
           +Register
           +Cache
           +Main memory(DRAM)
           +SSD(solid-state disk)
           +Magnetic disk
           +Optical disk
           +Magnitic tapes
                 -

09.volatile storage 與 nonvolatile storage
     -volatile storage 在停止供電後,會失去所有儲存的資料
     -nonvolatile storage 在停止供電後,不會失去儲存的資料

10.其他特殊設備
     -NVRAM(nonvolatile random-access memory)
           +透過DRAM+電池,擁有DRAM的速度,並能在斷電後保有資料(看電池能用多久)
   
-------------------------------------------------------------------------------------
1.2.3 I/O Structure

11.device controller 與 device driver (p12)
     -每個device driver都是特定用於某個device controller上的
     -device controller位於硬體上,擁有自己的Buffer與Register
     -device driver會去適當的讀取device controller的Register,判斷要做甚麼
      (such as “read a character from the keyboard”
     -作業系統針對不同的device controller擁有不同的device driver

12.DMA(direct memory access)
     -device controller不透CPU,直接把自己整個Block的Buffer傳輸到Main memory的某部分,
      每傳完一個Block丟出一個interupt,通知device driver操作已經完成

-------------------------------------------------------------------------------------
1.3 Computer-System Architecture

-------------------------------------------------------------------------------------
1.3.1 Single-Processor Systems

13.Single-Processor Systems
     -僅具有一個用來處理Instruction set的主CPU
     -幾乎所有的Single-Processor Systems架構仍具有其他.special-purpose processors,
      不過並不會因為有這些special-purpose processors,讓架構變成Multiprocessor systems

14.special-purpose processors
     -They may come in the form of device-specific processors
           +disk controllers
                 -a disk-controller microprocessor receives a sequence of requests
 fromthe main CPU and implements its own disk queue and scheduling algorithm
           +keyboard controllers
           +graphics controllers

-------------------------------------------------------------------------------------
1.3.2 Multiprocessor Systems

15.Multiprocessor systems have three main advantages (p14)
     -提高吞吐量(Increased throughput)
     -更經濟(Economy of scale)
     -增加可靠性(Increased reliability)

16.The multiple-processor systems in use today are of two types.
     -不對稱多處理(Asymmetric multiprocessing)
           +A boss–worker relationship. The boss processor schedules
            and allocates work to the worker processors.
     -對稱多處理(Symmetric multiprocessing , SMP)
           +Each processor performs all tasks within the operating system





2014年3月15日 星期六

Beaglebone Black 使用USB音效卡(1)

    由於想要把Beaglebone Black變成音樂撥放器,所以去研究了使用ALSA來進行LINUX的音訊處理,其中有遇到一些大大小小的問題,所以寫了此篇文章來分享,若小弟有哪裡做的不太對,歡迎大大留言指導,謝謝!

在閱讀之前,您可能需要有下列的裝置:
1.安裝Ubuntu的Beaglebone Black (kernel版本別太舊)
   要能上網 ,並且有電源供應器 (其實不一定,要看情況)
2.一張支援Linux的USB音效卡


在閱讀之前,您可能需要會下列的東西:
1.透過ssh指令連線進入beaglebone black (LINUX) 
   或是 透過putty連線進入beaglebone black (WINDOWS)
2.基本的Linux操縱
3.懂得使用Ubuntu的apt-get指令

正文
-----------------------------------------------------------------------------------------

USB音效卡直接接到BBB的USB埠中,連接網路線、電源線、USB線,
我使用的USB音效卡是露天拍賣買的,$50一個 ( 比運費還便宜阿 = _= )
" USB Audio 音效卡 Windows8 32bit/64bit & Linux 免驅動光碟 "
而網路是使用具有DHCP功能的router,插著就能上網,電源是使用
5V2A的變壓器供電。



接著,把BBB重開機,並使用ssh連上它。
確認音效卡有被偵測到,我們切換到proc/asound的資料夾去檢查

若您連這個資料夾都沒有,可能代表您的kernel是不支援ALSA的。
使用ls觀察檔案結構,在這裡可看到,Black 與 card1 分別為兩個設備,
一個是BBB的HDMI音源輸出 (HDMI是有音源輸出的 ),另一個則是我們的USB音效卡,
若您沒有出現card1,可能是您的音效卡晶片是不被kernel支援的。

我們可透過cat pcm來顯示這些音訊設備的資訊

識別   裝置名稱                        播放PCM    錄音PCM
00-00: HDMI nxp-hdmi-hifi-0 :  : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1

 HDMI nxp-hdmi-hifi-0這個就是BBB的HDMI音源輸出,我們可以看到,他僅有playback,
並沒有 capture ,而 USB Audio : USB Audio就是我們的USB音效卡。

確認我們的音效卡都OK後,可幫音效卡接上耳機,準備測試撥放音樂。

隨便把一個wav檔案抓到BBB中 (看你要透過網路還是甚麼方式,反正弄個wav就是了)
*可不要拿mp3檔案喔,因為mp3是編碼過後的,是不能這樣直接撥的。


銀魂主題曲,我還滿喜歡的XD

我們目前先不自己寫程式去撥放音樂,先用現成的ALSA工具來做,
到時候我會再繼續延伸下去。

使用apt-get install alsa-utils來安裝Alsa-utils工具,接著測試這幾個指令是否能用
aplay            ALSA的音樂播放工具                         簡易用法指令 aplay <filename>
alsamixer      ALSA的音效卡設定工具                     簡易用法指令 alsamixer

到這裡你或許會很開心的,直接下aplay Pray.wav來撥放音樂。


程式會停在這不動,代表正在撥放,不過~~~~你會甚麼都聽不到!!!

為甚麼呢?  因為預設的音效卡是HDMI音源輸出喔~你的耳機總不會接在那上面吧!!

那該怎麼辦呢?  我們要對aplay下參數,讓他使用USB音效卡來撥放!
識別   裝置名稱                        播放PCM    錄音PCM
00-00: HDMI nxp-hdmi-hifi-0 :  : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1

指令 aplay -D hw:1,0 Pray.wav , -D參數為選擇裝置,這裡我們使用 hw:1,0 是代表
01-00: USB Audio : USB Audio : playback 1 : capture 1 這個裝置 ( "01-00:" --> hw:1,0  )

不過~~希望您還沒把他撥放下去,因為......預設的音量絕對會穰您的耳朵感到不舒服....
我們能使用 alsamixer 指令進入設定畫面 :
輸入指令,alsamixer後應該會看到這畫面 (高級ㄟ~~居然不是純文字XD)


接著按下 F6 , 選擇我們的USB音效卡

左邊的是音源輸出音量~~建議調到個位數喔...很大聲的 QQ


調整完按ESC關閉。

最後 下指令  aplay -D hw:1,0 Pray.wav  聽音樂了 !!

-----------------------------------------------------------------------------------------
正文結束


終於介紹完了 ((累
若過程中有遇到甚麼問題,歡迎提出來大家一起討論喔 ^^