(这篇笔记是用手机写的,因此可能会比较简陋) Linux是当今世界比较经典且常用的来源操作系统(尽管绝大多数人认知的操作系统是Windows,或者安卓、ios)。Linux因为其开源的特性,能够让全世界的技术人员去“自定义”属于他们自己的操作系统,因此也经常作为操作系统相关课程的教材使用。
操作系统,是连接计算机软件和硬件之间的桥梁。操作系统提供了诸如命令街口、图形用户接口、程序接口(API)等接口,还起到了管理计算机资源的作用,包括处理器管理(cpu任务调度)、存储器管理、设备管理(管理设备io任务)、文件管理(实现虚拟文件系统,提供文件管理)。
一台运行Linux系统的机器上,大致可以分为用户空间和内核空间。用户空间是用户软件所在的地方,而内核空间则是系统内核、系统调用代码等所在的地方。内核是linux系统的核心,对linux系统的深度定制和修改通常需要修改linux内核并重新编译。
当一个软件运行时,没有特殊情况时,它运行在用户空间,也被称作“用户态”,或者是“目态”。在这种状态下,软件不能调用系统调用,如进行存储器读写等操作,也就是说,此时的软件操作是受限制的。而当它请求系统调用时,它就会进入内核空间,此时被称作“内核态”,或者是“管态”。在这种状态下,它能够调用系统调用,来进行一些比较核心且“危险”的操作。Linux这样的分配,能够提高系统的安全性,避免某些软件占用内核态并进行不恰当的操作。
操作系统需要实现的一项比较重要的任务是进程调用。进程是系统运行时的一组程序。像一般程序一样,进程运行时,需要一定的存储空间(存储进程代码和数据)和处理器资源。而从计算机硬件角度,一个处理器核心,同时只能运行一个进程。若是不进行进程调度,则并行效率将会大大降低,系统无法同时运行多个程序。因此,在操作系统中,往往采用某个进程,会占用一定时间的处理器资源,随后再分配给下一个进程。因为处理器运行速度很快,这样处理往往就像许多个进程并行运行了一样。而操作系统需要根据某种策略来进行进程调度,如先入先出或者优先级策略,同时可能需要使用多个队列来管理进程。