1.pointer integer
int i, *pi;
i = 10;
pi = &i;
int *pi; --> 表示pi代表一個記憶體位址,*pi會取出這個記憶體位址所儲存之值
int i; &i --> 表示取出i所在的記憶體位址
2.pointer array
int list[5] = {0, 1, 2, 3, 4};
list代表list[0]所在的記憶體位址,所以透過指標*(list+i)就可以相當於取list[i]之值
2014/05/20
[Linux] Build Linux i2c-gpio module 標準Linux i2c interface[bit-banging]
I2C是在IC之間,常被使用的data bus,而在目前的MCU之中,很多時候都會用GPIO來做模擬,也稱作bit-banging,而且Linux kernel也有support這個部分的driver,以下為研究的小心得:
詳細的I2C protocol可以參考
這次的I2C detail information:
7 bits address / not open-drain / 100kHz
2014/05/11
[Linux] 使用getnameinfo()來get local IPv6 address及用mask比較subnet
IPv6會是未來使用IP address的趨勢,所以嘗試使用getnameinfo來拿到本機的IPv6位址,並且跟其他的IPv6位址(fe80::19fb:8e1d:e1c:947e)比較,看使否在同一個子網域之下。比較的方式採用IPv6的位址與mask做完AND運算,得到Network ID後與另外一個IPv6的Network ID位址比較,因為無法一次比較128bytes,所以依次8個bytes一組,總共比較16次,16的結果都相同,就判定在同一個subnet之下。
IPv6為長度128 bytes的位址,表示的方式會以每16個bytes以符號分號":"隔開的方式來表示,譬如例子的"fe80:0000:0000:0000:19fb:8e1d:e1c:947e",總個128bytes,然後連續0的地方可以用連續兩個分號"::"來表示,所以就變成"fe80::19fb:8e1d:e1c:947e"。
IPv6為長度128 bytes的位址,表示的方式會以每16個bytes以符號分號":"隔開的方式來表示,譬如例子的"fe80:0000:0000:0000:19fb:8e1d:e1c:947e",總個128bytes,然後連續0的地方可以用連續兩個分號"::"來表示,所以就變成"fe80::19fb:8e1d:e1c:947e"。
2014/04/26
[Windows] Windows 8.1升級和跳過動態磚首頁
一開始拿到Windows 8的電腦,由於並非螢幕都是觸控,因此在使用Windows 8,可能就沒有那麼的順手。好加在Windows 8可以升級成Windows 8.1,除了擁有開始鍵之外,還能夠跳過動態磚,讓一開始登入的畫面就是傳統的桌面。
但是,在開心拿到Windows 8的電腦,要去市集下載更新的時候,會發現找不到Windows 8.1,查了一下,發現是因為Windows 8沒有更新些套件,因此在市集找不到Windows 8.1。參考官網說明。
但是,在開心拿到Windows 8的電腦,要去市集下載更新的時候,會發現找不到Windows 8.1,查了一下,發現是因為Windows 8沒有更新些套件,因此在市集找不到Windows 8.1。參考官網說明。
2014/04/25
[mongoose] HTTP web server使用分享
網頁server已經是現在不可或缺的一部份了,網頁的連線都要透過HTTP web server來處理,包括提供多連線的能力,簡單的HTTP web server可以參考[Java] Web Server撰寫這篇。
不過這次來介紹網路上提供open source的HTTP web server:mongoose的使用介紹。不僅可以在多個作業系統上使用,包括Linux、Mac和Windows,而且是open source,提供使用者自己去修改內容。網站參考mongoose download
這次使用的版本是mongoose-3.7.tgz,在Ubuntu 12.04下的環境使用
下載之後放在Ubuntu底下,然後解壓縮
不過這次來介紹網路上提供open source的HTTP web server:mongoose的使用介紹。不僅可以在多個作業系統上使用,包括Linux、Mac和Windows,而且是open source,提供使用者自己去修改內容。網站參考mongoose download
這次使用的版本是mongoose-3.7.tgz,在Ubuntu 12.04下的環境使用
下載之後放在Ubuntu底下,然後解壓縮
2014/03/18
[Linux] 連續記憶體分配策略(Contiguous Memory Allocation)
作業系統的記憶體管理,可以分成採用連續記憶體分配(Contiguous Memory Allocation)和採用分頁(Paging)技術。採用連續記憶體分配,方法簡單且速度快速,但缺點在於容易產生剩餘的記憶體片段(Fragmentation),記憶體的使用效率並不好,為了解決此現象,因此採用記憶體分頁的方式,來提升記憶體的使用率。
(102調查局特考_計算機概論)
五、記憶體的配置策略(Storage Placement Strategies)是用以決定進來的程式或資料應置於記憶體的那一區域。其策略包含最不適用(worst-fit)、最佳適用(best-fit)和最先適用(first-fit)等。
而在連續記憶體分配,有三個最常見的演算法,最先適用(first-fit)、最佳適用(best-fit)和最不適用(worst-fit)。底下舉特考的例子為例:
(102調查局特考_計算機概論)
五、記憶體的配置策略(Storage Placement Strategies)是用以決定進來的程式或資料應置於記憶體的那一區域。其策略包含最不適用(worst-fit)、最佳適用(best-fit)和最先適用(first-fit)等。
(一)請說明上述三種策略(最不適用、最佳適用和最先適用)在比較之下,各策略的優勢為何?(10分)
(二)若目前記憶體分區(memory partitions)狀況依序為 490 KB,190 KB,290 KB及550 KB,而記憶體空間需求依序為400 KB,220 KB,120 KB及450 KB。請分別描述在最不適用、最佳適用和最先適用三種不同策略下的記憶體配置情形。(10分)
(二)若目前記憶體分區(memory partitions)狀況依序為 490 KB,190 KB,290 KB及550 KB,而記憶體空間需求依序為400 KB,220 KB,120 KB及450 KB。請分別描述在最不適用、最佳適用和最先適用三種不同策略下的記憶體配置情形。(10分)
2014/03/16
[Linux] fork()的使用介紹
整個作業系統(Operating System, OS)是為了分配有限的硬體資源給Program使用,然而OS也視為一個Program,放進CPU中執行,為了讓OS Kernel辨識每個Process,就會有所謂的行程辨識元(Process Identifier, PID),其中特別的是PID 0和1,0是Kernel用來Swap,交換分頁使用;而1則是初始化行程,也是Kernel建立的第一個Process,其他的Process基本上都是透過PID 1的init Process來產生。因此整個OS系統本身可以想像成一個Tree of Processes,root為init Process,亦為Parent Process,然後用fork()依序產生底下的Child Process,並回傳值0代表是Child Process。
[Linux] Program, Process and Thread之差異
- Program: code程式
- Process: 正在CPU執行的Program
- Thread: 使用CPU的最小單元,較為輕巧的process,一個process可以產生多的thread,CPU是配給thread使用。
Thread存在有以下的目的:
(1) Responsiveness: 允許程式可以在被I/O中斷時,能夠繼續執行,譬如Web瀏覽器,可以同時看影片及下載檔案
(2) Resource Sharing: thread分享同樣的memory和resource,而process只能透過shared memory和message passing的方法來分享資料
(3) Economy: thread比process輕巧,創建和context switch thread比創建一個process來的快速
(4) Scalability: 可以平行執行於多核心的平台。
總結來說,寫好的code稱作為Program,放到CPU中執行就變成Process,但Process可以使用多的Thread代表的CPU執行單元,來增加執行效率。
2014/03/01
[OpenSSL] RSA非對稱型加解密演算法
RSA為目前在電子商業網路上很常用的加解密演算法,其安全性依靠因數分解,因為對極大整數做因數分解是很困難且花時間的,一般都會採用RSA numbers來產生公鑰(Public Key)和私鑰(Private Key),目前大多採用1024bits或2048bits。
公鑰和私鑰的產生
1.
隨意選擇兩個大的質數p和q,p不等於q,計算N=p*q。
3.
選擇一個小於r的整數e,且與r互質。
4.
用以下公式計算d : d*e≡1 (mod(p-1)*(q-1))。
5.
則(N, e)為私鑰,(N, d)則為公鑰。’
2014/02/26
[Linux] Ubuntu12.04下利用QEMU + chroot來編譯Linux Kernel (二)
參考上篇設定,利用QEMU執行Ubuntu,且連上網路。下載完Linux Kernel後,就可以準備來進行編譯Linux的Kernel了。細節可以參考這篇http://linux.vbird.org/linux_basic/0540kernel.php,目標是Ubuntu 12.04採用3.2版Kernel改成3.5版的Kernel。
查詢目前Kernel版本
\>uname -r
2014/02/20
[Linux] Ubuntu12.04下利用 QEMU + chroot來編譯 Linux Kernel
為了避免在編譯Linux Kernel的錯誤,把原本的Linux OS損壞。可以採用在原本的Linux中使用QEMU的Guset OS的Linux的環境來編譯Kernel,這樣就可以避免修改到原本的OS系統,細節可以參考這篇文章。
不過照著教學的步驟,使用Ubuntu 12.04來設定QEMU和編譯可能會遇到一些問題,像是一開始安裝QEMU和KVM之後
不過照著教學的步驟,使用Ubuntu 12.04來設定QEMU和編譯可能會遇到一些問題,像是一開始安裝QEMU和KVM之後
訂閱:
文章 (Atom)


