基础知识点
- 系统调用:可以理解为在操作系统内核当中的一个函数,这个函数对应用程序来说,是不可以被直接访问的。应用程序可以访问的是
API
接口,API有办法进系统内核中去执行相应的程序 windows
操作系统提供出API
应用编程接口,但是linux
不一样,linux
不需要通过这个接口来调用。- 目前世界上有三套
API
接口,WIN32 API,POSIX API
(被unix
广泛应用,很多应用程序是针对他编写的,就要提供相应的接口,以及参数),JAVA API(JVM)
。 - 系统中就像是有一条分割线,上面是用户模式(运行的都是应用程序),下面是内核模式(操作系统的内核)。分割起到保护作用,用户态里的应用程序,不可能随便访问内核里的资源。交互就要用到系统调用了。
- 例如C语言里面的
printf()
,它就是调用了系统程序write()
, - 应用程序不可以访问内核,但是系统可以访问应用程序的内核。只不过要多一些步骤。
- 系统程序通常和系统中的功能比较近,帮助我们完成系统里的重要职能。
- 比较常用的系统程序:复制拷贝文件(属于资源管理器就是系统程序)
- 一般很少用到的系统程序(磁盘分区,系统快照,磁盘碎片整理)
操作系统的设计之道
- 软件的体系结构是根据操作系统来的,操作系统就是早期最大的软件。
- 而操作系统的体系结构是从建筑学中学来的
操作系统的结构
- 由于用户应用程序可以直接调用系统程序,所以
DOS
系统结构很惧怕病毒。
- 做到了对内核的保护,应用层和系统层分离,但是在内核中是没有结构的,就造成了内核中错综复杂混乱的局面,牵一发而动全身,有一点出问题,内核全完蛋。
- 层次结构:上层调用下层的功能,下层向上层返回数据,不允许跨层访问。这种理念也映射到信息封装,隐藏,方方面面都有。
- 微内核,相比以前的大内核,有了很多好处,把更多的功能分给了用户空间(磁盘,网络管理都放到了用户空间)。这样的微内核带来了系统的稳定和安全,但是做什么都要经过内核,这样就导致效率低下。
Solaris Modular
系统,无可比拟,强大,比uniux,
linux
强很多。
Macos
,混合系统,两个内核BSD
(聚内核)+Mach
(微内核)
- 虚拟机结构(在操作系统之上装一个虚拟机,虚拟机中又可以再装不同的操作系统。)
- 未来的虚拟机结构(在硬件之上直接装一个虚拟机,在虚拟机中装不同的内核),集群系统,大型机房常用。
操作系统的功能
一、进程管理(cpu管理)
- 进程控制:(创建,暂停,唤醒,撤销)
- 进程调度:调度策略,优先级
- 进程撤销:进程间通信
二、内存管理
- 内存分配
- 内存共享
- 内存保护
- 虚拟内存管理
三、设备管理
- 设备的分配和调度
- 设备的无关性
- 设备传输控制
- 设备驱动
四、文件管理
- 存储空间管理
- 文件的操作
- 目录的操作
- 文件和目录存取权限的管理
总结:
- 提供接口供用户使用
- 分配和管理资源
小故事
- 最初设计
unix
的时候,是用汇编语言写的,但是太费劲了,于是找人开发出了C语言,所以uniux
和c语言
就像鸡和蛋的关系,不知道谁先有,而最初设计uniux
就是为了玩游戏。所以说C语言
非常适合用来编写操作系统。 - 跟硬件实打实的打交道的程序,只能用汇编语言来编写,其他语言更别说了,C语言也不行。