操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。操作系统是人与计算机之间的接口,也是计算机的灵魂。
计算的操作系统对于计算机可以说是十分重要的,从使用者角度来说,操作系统可以对计算机系统的各项资源板块开展调度工作,其中包括软硬件设备、数据信息等,运用计算机操作系统可以减少人工资源分配的工作强度,使用者对于计算的操作干预程度减少,计算机的智能化工作效率就可以得到很大的提升。其次在资源管理方面,如果由多个用户共同来管理一个计算机系统,那么可能就会有冲突矛盾存在于两个使用者的信息共享当中。为了更加合理的分配计算机的各个资源板块,协调计算机系统的各个组成部分,就需要充分发挥计算机操作系统的职能,对各个资源板块的使用效率和使用程度进行一个最优的调整,使得各个用户的需求都能够得到满足。最后,操作系统在计算机程序的辅助下,可以抽象处理计算系统资源提供的各项基础职能,以可视化的手段来向使用者展示操作系统功能,减低计算机的使用难度。
操作系统主要包括以下几个方面的功能 :
①进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。
②存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。
③设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。
④文件管理:文件存储空间的管理、目录管理 、文件操作管理、文件保护。
⑤作业管理是负责处理用户提交的任何要求。
(来自百度百科讲解)
我们用一句简单的话来描述操作系统:操作系统是一个进行软硬件资源管理的软件
。
当前我们先讲解操作系统,驱动程序,底层硬件,这三个部分,对于用户,用户操作接口和system call这三个部分后序会讲到。
(1)底层硬件:包括网卡,硬盘,显示器等。底层硬件的结构是冯·诺依曼体系。
(2)驱动程序:驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。 也就是说,最清楚硬件该怎么用的就是驱动程序,在计算机中真正让硬件工作的并不是操作系统,而是驱动程序,操作系统只是通过驱动程序操作的硬件。
在我们生活中,无论是做什么事情,都存在两个关系
1.做决策
2.做执行
比如你中午要做糖醋排骨,早上要去买排骨。在这个之情当中,决策就是中午想做糖醋排骨,执行就是早上出去买排骨。
而所谓管理,就是能正确的做出决策。
而计算机中操作系统(管理者)扮演的就是做决策的角色。
硬件(被管理者)就是执行角色。
我们举一个在学校里的例子:
一个学校里面,有校长,辅导员,学生。这三个角色,谁是管理者,谁是被管理者呢?很明显校长就是那个管理者,而学生就是被管理者,而至于辅导员就是那个保证决策落地的一个角色。
那么作为被管理者,一般学生在学校里能见到管理者校长吗?显然是不能的,相信绝大部分的学生都不知道校长什么样子。那么问题就来了,既然管理者和被管理者一般见不到面,那么管理者到底是怎么做到把学校管理好的,是怎么把学生管理好的呢?所以管理的本质不在于见面。管理者只要知道你在学校里方方面面的数据拿到,管理者就可把你安排的明明白白的。所以管理者只要拿到被管理者的数据就可以把被管理者管理好。所以管理的本质并不是对人进行管理,而是对人的信息做管理。
上面说了管理者的核心工作是做决策,但是是不是可以乱决策啊,肯定是不能的,管理者是通过拿到的数据进行做决策。也就是依据数据做决策。
但是我都没有与校长见过面,也没说过话,他是怎么知道我在学校的信息。所以这个时候我们的辅导员就出来了,要说到出来同班同学我们在学校里第二个见面最多的那肯定是辅导员了,我们在大学四年的所有执行大多都是辅导员下发的,最常见的就是在聊天群里来一个“@全体成员”的消息了。所以管理者是怎么拿到我们的信息的,那就是通过辅导员拿到信息,因为辅导员天天跟我们见面,是不是叫你去办公室喝点茶,你的所有成绩,做了什么好事坏事辅导员都知道,所以校长只要找到辅导员就可知道我们所有的信息。拿到了信息就可以对我们做管理。
管理者在面对大量的被管理者的时候,数据量必然很大,对人的管理也转化为对数据的管理。面对如此庞大的数据,我们的管理者是怎么进行有效的管理呢?既然是对信息做管理,而每个学生的信息的属性都是相同的,比如身高,体重,年龄,数学成绩,专业成绩等,这些信息的属性都是相同的,那么我们就可以把这些信息放到一个表格中,表格的第一行对应者学生信息的属性,之后的每一行就代表每个学生的属性,这个时候对信息的管理就变成了对表格的管理。这样子管理者就可以知道每个学生的属性了。但是这样也有一个缺点就是面对这么庞大的数据量,想要查找一个学生的数据不比与大海捞针。这个时候管理者懂编程,管理者就像,能不能把这个工作交给计算机干,既然每个学生的信息属性都是一样的,那么我们就可以定义一个结构体,将信息的属性包含在结构体中。
struct student
{
char name[20];
int age;
int grade;
char score[20];
char other[20];
……
};
这样只要实例化一个结构体就代表一个学生了。
但是这样还是表格没什么区别啊,如果数据量很大,那不是实例化出来的对象也很多。
所以管理者又想到一个好办法,就是在定义一个结构体指针。
struct student
{
char name[20];
int age;
int grade;
char score[20];
char other[20];
……
struct student* next;
};
有了结构指针,我们的第一个学生的结构体就包含了下一个学生结构体的地址,找到第一个学生就可以找到第二个学生,以此类推就形成了一个链表。所以以后管理者想要查找一个学生的信息只需要遍历这个链表就行了。但是遍历的话还是要把每个学生的信息看一遍啊。于是,既然都已经设计出来结构体,这个是时候管理者就又设计出来了一个对链表进行增删改查的代码。所以这个时候管理者对数据的增删改查就变成了对链表的增删改查,而这个动作已经用程序写完了,是由计算机执行了。所以校长的所有决策就变成了对链表的增删改查。
所以这样就完成了一个工作:对管理的一个计算机的建模的过程。为了简化这个建模的过程,我们叫做先描述在组织
计算机管理硬件
那么对于我们的操作系统是怎么管理硬件的呢?也是先描述在组织。
就然都是硬件,所以硬件的信息属性都是相同的,那么就可以将这些信息放到一个结构体中。这叫做先描述
struct device
{
char name[20];
char status[20];
……
struct device* next;
}
那么将网卡这个设别放到结构中,将磁盘这个设备放到结构体中……让后将这些结构体连接起来形成一个链表。于是操作系统想要查找一个设备只需要对链表进行遍历。这个过程叫做组织。
上面我们见到了操作系统是什么,操作系统是一个进行软硬件资源管理的一款软件。那么操作系统是怎么对软硬件进行管理的呢。首先管理的本质是对数据的管理。但是如果数据量很大,那么操作系统的管理效率就会很低。而为了解决这个问题,我们就要对数据进行描述,数据量虽然大,但是数据的信息属性是相同,于是我们就可以把数据的信息属性写成一个结构体,这个叫做先描述。有了结构体就可以用特定的方式把结构体写成特定的数据结构,这个时候对数据的管理就变成了对特定的数据结构进行管理,这个过程叫做组织。也就是说操作系统对软硬件进行管理的方式是,将每个软硬件的信息属性用结构体表示,这个叫做把软管硬件描述出来,后用特定的数据结构将这些结构体组织起来。然后操作系统对软管硬件进行管理就变成了对特定的数据结构体进行管理 。
所以管理的方式就可以用六个字来表示:先描述在组织。
上述提到了,操作系统是一个进行软硬件资源管理的软件。
那么这里提出的问题为什么要有操作系统可以用另一种提问方式——为什么要有操作系统的管理。
先说结论:对于操作系统主要有两大用途
1.对下进行软硬件资源管理——手段
2.对上提供一个良好的运行环境——目的
这里的良好可以稳定,高效,安全。
对于软硬件资源的管理中对于硬件的管理就是对硬件的数据进行管理,而硬件的数据是驱动程序所提供的,有了数据就可以这些数据的属性进行描述起来,然后通过特定的数据结构将其组织起来,这样对硬件的管理就变成了对数据结构的管理。
对于软件也是同样的道理,既然操作系统是通过驱动程序管理软件的,那么操作系统也用相同的方式管理驱动程序的。
计算机终归是用来给人使用的,而且计算机必定会存放各种数据。那么计算机是怎么做到对这些数据的安全和,稳定的呢
我们举一个银行的例子。
我们到银行里存钱,能不能直接跟柜台的人员说我们存钱到因你们银行里面,你们登记好来,然后打开钱库我直接放钱进去啊?明显是不能的,因为这样并不能确定这个存钱的人到底是不是坏人,万一他进了钱库把其他人的钱拿走了呢。同理在计算机里这里有个用户如果直接去访问操作系统,而操作系统是用来管理软硬件的,也就是对软硬件的数据进行管理,用户一进入操作系统中就可以看到琳琅满目的各种信息,而计算机不能判断用户是不是坏人,不知道会不会对这些数据进行破坏,并且可能这些数据当中有些是机密数据,并不能确定用户会不会进行窃取。
所以操作系统就必须在用户和操作系统当中设计一个让用户不能直接通过操作系统进行访问数据,而是用操作系统提供的特殊手段进行访问数据,而这个就是系统访问接口。
这个时候用户就只能通过这个系统访问接口来访问数据,就好比一个人去银行,你不能直接到钱库里面去存钱,也不能直接去钱库里取钱,而是把你的个人信息跟柜台的人员然后通过柜台人员进行存取钱。
而系统调用接口,其实就是用C语言设计出来的函数。这个由操作系统提供的函数叫做系统调用函数。
既然是函数那肯定是有输入和输出的。而操作系统之所以要提供系统调用接口无非是给上层用户提供两方面的功能:数据层面上的支持和功能方面的支持。
所以我们就有一个结论:任何人都不能直接发访问操作系统内中的任何数据,必须采用操作系统。也就是说用户不能直接越过操作系统直接访问底层硬件/软件,必须贯穿操作系统。而操作系统要对上提供服务必须提供系统调用接口。
我们在使用C/C++中的print/scanf输入输出的时候,printf最终打印的数据是到显示屏上的,那printf是直接打印到显示屏上的吗?显示屏是硬件,既然是硬件那么它必定是受操作系统管理的,也就是说printf想要打印数据到显示屏上,必须是通过系统调用接口将数据打印到显示屏上的。同理scanf也是一样的。然而要调用系统调用接口,printf/scanf一定用封装系统调用函数。
那么用户可以直接掉i用系统调用接口吗?答案是可以的,因为系统调用接口本来就是个用户使用的。但是我们使用C/C++或者其他语言的时候我们也没有用到系统调用接口也就是系统调用函数啊。这是因为由于使用系统调用的难易程度将系统调用函数封装到了用户调用接口。
这样就可以减少使用者的使用成本。最典型的例子就是C语言中的C标准库。
龙年到来,愿你的生活龙腾虎跃,事业龙飞凤舞,精神龙马飞扬,智慧龙腾四海,家庭龙凤呈祥,健康龙腾虎跃,爱情龙凤呈祥,财运龙腾四海,事业辉煌腾达,烦恼龙去凤来,幸福龙凤呈祥!
祝大家在新的一年里天天开心,学业腾飞,事业有成。