電腦的作業系統(Operation System),也是電腦系統的總管,簡稱 OS, 管理著電腦裡一切可用的資源,包括記憶體和儲存裝置的可用空間、CPU 可用的計算時間、可用的線路連線等等。 平時負責安排並監督在電腦裡每個軟硬體角色的工作,是電腦使用者忠實的助手與代理人。
傳統電腦裡的晶片,包括中央處理器(CPU),都是從接收電子訊號開始工作,當然這些電子訊號可以由程式控制,然而,如個人電腦這麼複雜的系統, 如果每一個程式設計師來必須親自撰寫程式(program)來控制所有的訊號,那會是非常繁重且重複的工作,而且也缺乏彈性,如果電腦換了某個零件, 或是要把程式移到另一部機器去運作,電子訊號便不相同,程式是否需要重新撰寫?
為了要能夠駕馭複雜的系統,作業系統(OS)就成了程式和機器之間的中間人,基本上,作業系統會達成三項任務,第一、準備好讓程式運作的環境, 第二、管理電腦內所有的可用資源,第三、成為程式與機器之間的一個抽象層面,或稱代理層,也就是說,程式不一定要了解機器的電子訊號細節, 程式只要對作業系統下令,就能夠經由它達到控制硬體裝置的效果,而將程式下的命令翻譯成硬體的電子訊號的這份工作就由作業系統代勞了。
如果把電腦比喻成一棟豪宅或一整個園區,作業系統就相當於是園區的總管家,他會清點園區內所有設施,他會指揮其他的僕役去掌握這些設施的狀態, 包括清潔、維修、檢查故障與否;程式就像園區內的工作者,當他要工作的時候,管家會把書桌和所有要用到的東西準備好,工作者只要在書桌前坐下來, 專注於其獨特功能即可,當電腦要換功能的時候,總管家會把環境重新整理好、把書桌清空,迎接下一個工作者。
作業系統在電腦系統中的角色輕重視電腦系統的複雜度而定,如果系統的任務很單純,例如硬體構造很簡單而且固定只執行某一個程式, 那麼作業系統就會很小、很單純,如果系統很複雜,例如現代的個人電腦、能夠同時執行多種程式並且連接各種周邊裝置,那麼作業系統就會很龐大、很複雜。
如果電腦系統只有一個使用者,而且同時只執行一個程式,那麼作業系統的工作就很單純,它只要把環境整理好,然後把整部機器的控制全都交給這個程式, 接下來直到程式結束之前,作業系統都沒有其他工作了,例如早期的個人電腦所使用的 MS-DOS 系統,以及一些小型裝置上的韌體作業系統。
如果要讓電腦系統能夠同時執行多個程式,然而 CPU 只有一個或少量核心,作業系統會把 CPU 核心的使用時間切分為許多微小的單位, 然後排定這些程式輪流使用這些時間單位的「行程表(schedule」,讓 CPU 核心在多個程式之間輪流切換執行,以營造這些程式都正同時執行中的「假象」, 這就像是讓一個人「同時」做很多件事情的方法是「每件都做一點」,會累死這個人但是每件事情都好像有在進展「的樣子」, 這樣的作業系統例如現代的個人電腦所使用的 Windows 與 macOS 系統,以及智慧型手機所使用的 Android 與 iOS 系統。
為了讓這些同時執行的程式不會互相干擾,作業系統通常會把每個程式所使用的記憶體與其他資源徹底地區隔開來,甚至隔離到讓它們不知道彼此存在的程度, 就彷彿讓這些程式都「以為」自己正獨佔著這部機器,這種「虛擬機器(virtual machine)」的概念是現代作業系統的主流作法。
如果這部電腦系統不但會同時執行多個程式,而且會被許多使用者同時使用,例如它是網路上的一部主機,那麼每個使用者所執行的程式、使用的儲存空間等等資源, 就必須更進一步地區隔開來,並且嚴格限制每個使用者及使用的程式的權限(privilege),讓這些使用者和程式不只不能干擾彼此,更不能互相侵犯! 這樣的作業系統例如網路主機所使用的 Linux、UNIX、以及 Windows Server 系統。
除了以上的這些基本功能以外,由於網路的普及,現代主流的作業系統通常也很重視資訊安全方面,所以會內建一些安全性檢查、加密連線、或阻擋常見惡意軟體的功能, 除此之外,如果有一些功能是大部分的程式都會用到的,作業系統也常會直接提供軟體程式庫,讓運行於其上的應用程式不需要再重複開發這些功能。