發表文章

目前顯示的是有「作業系統」標籤的文章

「一篇說完資工系四年所學」

圖片
「前言」 最近公司內的新人越來越多,而且很多不是相關工程背景的學生,在教導或是說明一些電腦科學的用詞時,很明顯的她們並不曉得是什麼,這依舊是老問題,自己平常熟悉的事物在其他人眼中卻是另一個世界的內容,因此藉這篇文章機會把整個大學中電腦科學課程中所想要傳達跟教導的事情一起描述完。 「建模:描述名詞並且量化之」 >你怎麼描述愛情是什麼? 這算是種常見的問題,你怎麼完完整整的說明你喜歡某一個人?你可能會說他長得很帥、個性很好、會照顧人、身穿名牌衣服、家裡有錢,既然如此,下一個問題是,你要怎麼把這些資訊放到資料庫裡頭?你要怎麼把長得帥這件事情用資料描述出來? 這個問題的本質是在談建模(Modeling),要怎麼把東西量化(quant)起來變成可以描述的內容,比較常見的情景是,購買商品的評分,或是谷歌地圖上的地點評價,你在嘗試給予這個地方一個量化的標準,當然一個人的評分會十分偏頗,但如果拉一萬個人一起幫忙的話,效果就會大不同。評分會形成某種趨勢存在,有些人會按1分,有些人會按2分,有些人會按3分等,你會得到某種回歸趨勢,為了得到這個趨勢,你需要先把事情量化並且描述下來,而描述下來的東西我們則可以進行管理。 舉例來說:你會想知道,一間雞舍有多少產能,我這個雞舍有好幾排不同品種的雞正在生產雞蛋,為此你會把雞給個編號,給一個ID 好辨識,同時會說這個雞是黑色的、體重多少、多少年齡,嘗試把對於雞的描述記錄下來。 「管理物品最有效的結構:樹狀結構」 >三年五班七號給我過來! 有趣的地方來了,萬物總是會被歸納在一起,如果你整理自己的房間一樣,你會把衣服收在一堆,褲子收在一堆,鞋子收在一堆,這也叫做物以類聚。而為了管理你的房間,你會採用樹狀結構的方式管理房間內容。 一樣的管理管理雞社也是,相同品種或是顏色靠近的雞會被收在一起,你會直覺知道雞在那一個排列底下,用樹狀結構管理是一直以來的作法,而且也是方便管理的,回憶一下,生物中的,界門綱目科屬種,也是為了管理自然界中的各種生物,軍隊治理中也是,我們用班、排、連、營、軍團來管理,這也是某種樹狀結構。 「資工重點項目」 >虛擬世界跟真實世界是做相同的事情 「資料結構」旨是在管理空間用的,方才說過,最好管理的方式是樹狀結構,腦中直覺想到的是網狀結構,但效能不佳,鏈狀則是太慢。可以管理空間後,再來就該提升效率了,也就是「演算法」存在...

[Linux] 利用 pipe 解決 fork 共用變數問題

圖片
圖片來源:https://jan.newmarch.name/ProgrammingUnix/ipc/lecture.html 目錄 一.背景知識 二.實作步驟 三.參考文獻 一.背景知識 1.Linux     Linux是一種自由和開放原始碼的類UNIX作業系統。術語Linux只表示作業系統核心本身,但通常採用Linux核心來表達該意思。Linux則常用來指基於Linux核心的完整作業系統,包括GUI元件和許多其他實用工具。由於這些支援使用者空間的系統工具和庫主要由理察·斯托曼於1983年發起的GNU計劃提供,自由軟體基金會提議將該組合系統命名為GNU/Linux[7][8],但Linux不屬於GNU計劃。 2.fork()      In  computing , particularly in the context of the  Unix  operating system and its  workalikes ,  fork  is an operation whereby a  process  creates a copy of itself. It is usually a  system call , implemented in the  kernel . Fork is the primary (and historically, only) method of process creation on Unix-like operating systems. 3.pipe     pipe() creates a pipe, a unidirectional data channel that can be used for interprocess ommunication.  The array pipefd is used to return two file descriptors referring to the ends of the pipe. pipefd[0] refers to the read e...

添加 System call(系統呼叫) 至 linux kernel (環境:Ubuntu 12.04LTS + kernel:3.13.0-32)

圖片
圖與內文無關 目錄 一.背景知識 二.實作步驟 三.Step by step 四.參考文獻 一.背景知識 1.Linux     Linux是一種自由和開放原始碼的類UNIX作業系統。術語Linux只表示作業系統核心本身,但通常採用Linux核心來表達該意思。Linux則常用來指基於Linux核心的完整作業系統,包括GUI元件和許多其他實用工具。由於這些支援使用者空間的系統工具和庫主要由理察·斯托曼於1983年發起的GNU計劃提供,自由軟體基金會提議將該組合系統命名為GNU/Linux[7][8],但Linux不屬於GNU計劃。 2.Linux kernel     Linux內核(英語:Linux kernel),是一種電腦作業系統內核,以C語言和組合語言寫成,符合POSIX標準,以GNU通用公眾授權條款釋出。Linux內核最早是由芬蘭駭客林納斯·托瓦茲為嘗試在自己的英特爾x86架構電腦上提供自由免費的類Unix系統而開發的。該計劃開始於1991年,林納斯·托瓦茲當時在Usenet新聞群組comp.os.minix登載貼文[7],這份著名的貼文標示著Linux內核計劃的正式開始。 3.System call (系統呼叫)     指運行在使用者空間的程序向作業系統內核請求需要更高權限運行的服務。系統調用提供了用戶程序與作業系統之間的接口。大多數系統交互式操作需求在內核態執行。如設備IO操作或者進程間通信。 二.實作步驟 各kernel版本或是本身OS的不同,在某些地方上會有些微不,例如檔案位置,檔案名稱,或是include的標頭檔不同,這部分可能就要上網找資料去惹,另外不同的 Linux 系統之間也有可能使用不同的指令, 在實作時請多留意自己的環境 ,本實作是以 Ubuntu 12.04LTS + kernel:3.13.0-32-generic 來執行。以下流程可供參,對於其他環境來說應該是大同小異的。 Kernel side 1.  下載 kernel source 2.  定義system call sys_hello(): 3. 添加 hello 目錄至 ...