热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

操作系统哲学原理(01)基础原理 操作系统导论

说明:该系类文章更多的是从从哲学视角看操作系统这门学科。同时也是操作系统的学习笔记总结。因为博主这些年主要是以研究安卓系统和嵌入式Linux为主,因此这

说明:该系类文章更多的是从从哲学视角看 操作系统 这门学科。同时也是 操作系统的学习笔记总结。因为博主 这些年主要是以研究安卓系统和 嵌入式Linux为主,因此这个系类文章也是这两个领域不可或缺的基石之一,尤其是对操作系统感兴趣的伙伴可特别关注。



1 操作系统导论

1.1 人造学科

一个角度看待所有事物分为两类:发明(创造)与发现(观察)

计算机本身就是一个人造学科,人造学科的4个特点,如下:

  • 不精确,有相对性:没有对错,只有适合/不适合
  • 从对人类活动的观察导出:对事物的观察与抽象
  • 依赖于人的主观判断力;人不同,看待事物的角度不同,抽象出来的对象不同,因此,对于标准,只是少数服从多数
  • 符合人的直觉:如果按照我们的意愿去理解这些原理,则十分直接了当

相对人造学科,神造学科具有的4个相反的特点:

  • 精确、绝对:只有对错,没有中间状态,例如数学领域
  • 从对自然的观察导出:通过自然现象严密推理获得自然的规律
  • 不依赖人的主观判断力:所有人的观察结果是一样的,即观察结果可以被任何人验证
  • 违反人的直觉:人类的思想和自然本身是不同的,需要通过观察发现规律,利用规律来推导结论,而不是主观臆断

操作系统是一个人造学科,因此要按照人造事物的特点来学习。

1.2 程序是如何运行的

从图中了解到,程序运行至少需要4个因素:

  • 程序设计语言
  • 编译系统
  • 操作系统(在程序的执行过程中具有关键的作用)
  • 指令集结构(计算机硬件系统)

1.3 什么是操作系统

操作系统(OS)的概念:一个介于计算机硬件和应用软件之间的一个软件系统,目的就是使得计算机变得好用,运作有序。操作系统的位置如果所示:

操作系统要做的事情:

  • 计算机的功能和复杂性在不断发生变化,掌控的事情越来越多,也越来越发杂,本身能够拥有的资源也会越来越多,因此需要不断改善。利用操作系统会使事情变得相对简单些,即操作系统升级的时候改动量降到最低。
  • 知晓计算机上发生的所有事情,从而维护计算机,保证计算机的健康。
  • 为了满足人类更加苛刻的要求,不断发展。

操作系统的功能:

  • 代替用户以及应用管理计算机上的软件、硬件资源。
  • 保证计算机资源的公平竞争和使用。
  • 防止对计算机资源的非法侵占和使用。
  • 保证操作系统自身正常运转。

1.4 魔术与管理

操作系统在计算机运行过程中扮演的角色:魔术师和管理者。

  • 魔术师:将丑陋变得美好,将少变多,将无变有。但是这并不是凭空想象,而是运用了类似于能量转换的一种方式,或者说是巧妙地拿空间来换取时间、拿时间来换取空间。
  • 管理者:对资源进行管理以达到公平,有效。

根据管理的资源不同,具体功能包括:

  • CPU管理:如何分配CPU给不同的应用和用户。
  • 内存管理:如何分配内存给不同的应用和用户。
  • 外存管理:如何分配外存给不同的应用和用户。
  • I / O管理:如何分配输入输出设备给不同的应用和用户。

除了对资源进行管理和抽象,还需要保证自身的稳定,那么还需要包括2项:

  • 健壮性管理:如何确保操作系统自身的正常运作。
  • 安全性管理:如何防止非法操作和入侵。

为了完成上述功能,人们设计了很多机制,而这些东西的背后隐含的是人类的哲学思想。

1.5 用户程序与操作系统

第一个视角:用户程序调用操作系统,如下所示:

应用程序调用系统API完成功能应用程序是主程序,操作系统被调用。

第二个视角:操作系统调用用户程序,如下所示:

操作系统先启动,是主程序,之后是调用各种应用程序,最后回到操作系统。

说明:两种观点无对错,只是角度问题,导致不同的观点。实际上操作系统和各个应用程序是可以看作是相互调用,从而形成一个非常复杂的动态关系。

1.6 操作系统的范畴

操作系统的具体任务:

@1 CPU管理(进程管理):

  • 公平:每个程序都有机会使用CPU
  • 非阻塞:阻塞不能妨碍其他进程继续前进
  • 优先级:优先级高的程序运行,则优先级低的必须让出资源

@2 内存管理:管理缓存、主存、磁盘、磁带等存储介质形成的内存架构。虚拟内存将时间转换为空间,同时对于物理内存需要进行分割和保护,即不能越界。

@3 存储管理(文件系统):将磁盘变成用户很容易使用的媒介。

@4 设备管理:管理输入输出设备。

@5 操作系统提供的机制:

  • 屏蔽不同设备的差异,方便用户访问;
  • 提供并发访问,使设备具有共享性
  • 批处理:无须人机交互的模式,主要是达到吞吐量最大化,单位时间完成的任务最多。    

1.7 为什么学习操作系统

操作系统的功能、技巧、思想、哲学理念在很多领域内使用,是源于生活的一种抽象,而这为触类旁通学习其他东西来讲容易多了。


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
author-avatar
书友56952614
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有