目录
1. 简述操作系统的学习方法
操作系统,被誉为计算机科学学科中的哲学,似乎与计算机相关的一切都与它息息相关,甚至从他身上又衍生出了一些其他的学科,比如"数据结构"。那么,我们该如何更好的学习操作系统呢?
我认为,要想学好操作系统,我们不能只盯着教材上的内容,而要着眼于一款具体的操作系统,比如"Linux",因为,对于许多教材来说,通常都只会讲解一些普适的知识点,这些知识点在Windows环境下也适用,在Linux环境下也适用,在MacOS环境上也适用。这样就会导致我们对一些比较难以理解的知识点感到很模糊,学不明白的感觉。
就比如说操作系统中的进程PCB,如果我们只是看什么是PCB,PCB是干什么的?感觉或许不够清晰,不够深刻,但是如果我们在看了PCB之后,去立刻着眼了解具体的PCB,比如Linux下的"task_struct"结构体,了解其中的成员变量等等,或许我们就会有一些不一样的感受了!
并且我们要尽量做到可以把操作系统的知识,可以迁移到别的地方,比如说"计算机组成原理"。
2. 浅谈操作系统
1). 什么是操作系统?
现在的操作系统往往都是:内核 + 其他程序,其中内核就是对内存、进程、文件、驱动的管理,其他程序往往会有一些:Shell、glibc、操作系统原生的库等等等等。
本质上来说,操作系统就是一种对硬件资源管理的软件,相当于计算机这个铁疙瘩为我们适配的管家!
2). 为什么要有操作系统?
"以人为本"!人们在创造任何一个工具的时候,都是为了让人们在解决问题的时候更加方便!包括操作系统!
因此,操作系统通过对下层软硬件的资源的管理(手段),为上层用户提供稳定的,安全的,高效的运行环境(目的)。
3). 操作系统是如何来管理的?
先说结论:"先描述,再组织" ,这一点十分重要,可以说他贯穿了整个操作系统,任何需要操作系统管理的资源都是通过这样的方式来做的。
我先哪一个现实中的例子来说:我们在上学的时候,校长对整个学校学生的管理。校长在管理学生的时候,是可以不用见到每一个学生的,只需要知道学生的相关信息就可以对他进行管理,比如一个学生的姓名,一个学生的班级,学号等等。操作系统管理硬件也是这样的,操作系统只需要知道内一个硬件的相关信息就可以很好的管理起来硬件了,比如说这个设备的名称,设备的状态,设备的编号等等。
所以说操作系统管理硬件,就可以将一个物理的硬件抽象成一个结构体,比如说:
struct device
{
name;
status;
id;
...
};
之后使用一个数据结构将他们组织起来,就比如说链表:
struct device
{
name;
status;
id;
...
struct device *next;
};
将所有的设备组织起来,假如说有新的设备,操作系统就可以为他创建一个与其对应的结构体对象,之后将他插入到设备链表中。
再结合上面现实中的例子,校长拿学生的相关数据需要通过班主任,那操作系统想拿到设备的数据就需要通过设备所对应的"驱动程序",这里就对驱动程序不详谈了。
最后结合我们也可以现在主流的编程语言管中窥豹,他们都是以面向对象为主,因为这些语言都提供了:
1. 面向对象的功能,以便于我们可以更好的描述一个对象(比如描述一个PCB);
2. 标准库,提供了这些标准的数据结构,以便于我们在描述好对象之后可以更好的管理对象。
3. 小结
操作系统作为当今最重要的计算机软件之一,其中包含的很多"计算机哲学",我们可以通过他学到计算机很多相关的知识,比如"计算机组成原理",本文呢也只是浅谈一下,作为一个引子!希望大家都能更好的掌握关于操作系统的知识!