什么是操作系统?
没有软件,计算机只是一堆发热的电子元件。如果说硬件是计算机的心脏,则软件就是它的灵魂。操作系统是允许用户运行应用程序的一组系统程序。操作系统将系统的硬件抽象,呈现在用户和应用程序之前的是一个虚拟的机器。是软件造就了计算机系统的特点。
大多数PC可以运行一到多个操作系统,而每一个操作系统从外观和感觉上都大不相同。Linux由不同功能的部分构成,这些部分总体组合构成了Linux操作系统。Linux最明显的部分就是Kernel自身,但是如果没有shell或libraries一样没有用处。
操作系统是计算机核心之一,不过相对来说要好学点。不过那也是看起来的样子。
推荐几本阅读图书:
操作系统的几个核心概念
进程(Processes)
进程执行操作系统中的任务。程序是存放在磁盘上的包括一系列机器代码指令和数据的可执行的映像,因此,是一个被动的实体。进程可以看作是一个执行中的计算机程序。它是动态的实体,在处理器执行机器代码指令时不断改变。处理程序的指令和数据,进程也包括程序计数器和其他CPU的寄存器以及包括临时数据(例如例程参数、返回地址和保存的变量)的堆栈。
当前执行的程序,或者说进程,包括微处理器中所有的当前的活动。Linux是一个多进程的操作系统。进程是分离的任务,拥有各自的权利和责任。如果一个进程崩溃,它不应该让系统中的另一个进程崩溃。每一个独立的进程运行在自己的虚拟地址空间,除了通过安全的核心管理的机制之外无法影响其他的进程。
文件(File)
内存分页
缓存(Cache)
ELF文件格式
中断和中断处理(Interrupts and Interrupt Handling)
Socket
端口
……
Pipes(管道)
$ ls | pr | lpr
把列出目录文件的命令ls的输出通过管道接到pr命令的标准输入上进行分页。最后,pr命令的标准输出通过管道连接到lpr命令的标准输入上,在缺省打印机上打印出结果。管道是单向的字节流,把一个进程的标准输出和另一个进程的标准输入连接在一起。没有一个进程意识到这种重定向,和它平常一样工作。是shell建立了进程之间的临时管道。
在Linux中,使用指向同一个临时VFS I节点(本身指向内存中的一个物理页)的两个file数据结构来实现管道。图5.1显示了每一个file数据结构包含了不同的文件操作例程的向量表的指针:一个用于写,另一个从管道中读。这掩盖了和通用的读写普通文件的系统调用的不同。当写进程向管道中写的时候,字节拷贝到了共享的数据页,当从管道中读的时候,字节从共享页中拷贝出来。Linux必须同步对于管道的访问。必须保证管道的写和读步调一致,它使用锁、等待队列和信号(locks,wait queues and signals)。
实战
一个小的模拟操作系统给大家:GeekOS(http://geekos.sourceforge.net/)。
What is it?
GeekOS is a tiny operating system kernel for x86 PCs. Its main purpose is to serve as a simple but realistic example of an OS kernel running on real hardware. (Actually, most of the development is done on the Bochs emulator.)
The goal of GeekOS is to be a tool for learning about operating system kernels. As of version 0.2.0, it comes with a set of projects suitable for use in an undergraduate operating systems course, or for self-directed learning. GeekOS has been used in courses at a number of colleges and universities.
总结
核心
学好了同时掌握
汇编/C语言/数据结构和算法/操作系统/组成原理部分等内容
值得你学习
致敬:Linus Benedict Torvalds (林纳斯·本纳第克特·托瓦兹)
Linux内核作者 & Git作者。
Software is like sex: it's better when it's free.
欢迎加入程序员的世界,添物科技为您服务。