接下来会写一系列Operating System(操作系统)的文章,今天先开个头。本文主要内容:

  1. 什么是操作系统
  2. 操作系统的核心概念
  3. 程序=数据结构+算法

一、什么是操作系统

1.1 操作系统是对硬件的抽象(abstracion)

操作系统的重要功能之一就是隐藏硬件,且把硬件的功能用漂亮高度抽象的接口展露个应用程序。

OS在整个计算机系统中的位置如上图所示。

抽象是管理复杂度的核心理念,操作系统完成了对硬件的抽象,这使得我们程序员从各种五花八门的硬件中解脱出来,使用操作系统所提供的尤美接口进行应用程序的编程。现代人每天都在使用电脑,感觉操作系统是给人用的,其实错了,操作系统是给应用程序用的,不是给人用的。操作系统所做的抽象是给应用程序降低复杂度的。

1.2 操作系统是一个资源管理器

大量的应用程序同时在操作系统上运行,这些应用程序都需要操作不同的资源,I/O,CPU,Memory等等。如何给这些应用程序分配资源,分配策略是什么,如果资源同时被不同的应用程序操作,如何保证这些资源的完整性,等等,这些都是操作系统要解决的问题。

举几个例子:

  1. 谁将得到CPU资源,使用多久
  2. 内存保护:应用A不会使得应用B的数据丢失

二、操作系统的核心概念

文章开始说了操作系统是对硬件的抽象,所以操作系统的核心概念都是对具体物理硬件的抽象,当本系列博文的终点也是下面的几个内容。

2.1 进程(线程)

进程(线程)是操作系统对CPU的抽象

2.2 虚拟内存(地址空间)

虚拟内存是操作系统对物理内存的抽象

2.3 文件

文件是操作系统对物理磁盘的抽象

三、程序=数据结构+算法

程序=数据结构+算法这句话怎么理解,其实可以通过操作系统来理解。

3.1 数据结构

数据结构即抽象,在操作系统中因为抽象,应用程序只需要关注线程,进程,文件,而无需关注这些背后的实现,也不用担心这些背后实现有可能会变化。在平时的应用程序编程中,我们提倡面向接口编程,这个接口即数据结构,当然也是抽象。

还有种种现在的高级语言,比如Java,C#,是更加搞级别的抽象,其编程语法在某种程度来说便是数据结构。

3.2 算法

算法即策略,即折中和权衡,我们处在一个资源有限的世界,这个相对好理解。在操作系统中这个折中和权衡体现的淋漓尽致

  1. cpu有限:谁该得到CPU,得到后拿多久合适
  2. 内存有限:什么时候应该把数据放在内存中,什么时候应该移除
  3. 缓存有限:那些数据应该放入CPU的缓存中,一级还是三级,什么时候应该替换,该替换那些数据
  4. 。。。

最新文章

  1. jQuery中width、innerWidth、outerWidth的区别
  2. submit 读取mb52数据
  3. Python 深入理解yield
  4. django view
  5. 【JAVA、C++】LeetCode 013 Roman to Integer
  6. Careercup - Google面试题 - 5724823657381888
  7. 用PYTHON练练一些算法
  8. uploadify3.1 参数 中文详解
  9. JavaScript加密解密7种方法总结分析
  10. oracle 11g 完全卸载方法
  11. Normalize.css介绍,作用,使用方法
  12. win10 uwp MVVM 轻量框架
  13. Natas Wargame Level26 Writeup(PHP对象注入)
  14. 使用GPA针对android应用的绘制分析
  15. 异常-----freemarker.core.InvalidReferenceException问题解决
  16. 解决CentOS 7中php-fpm进程数过多导致服务器内存资源消耗较大的问题
  17. 【.NET Core微服务实战-统一身份认证】开篇及目录索引
  18. Python基础——0前言
  19. C#之WebApi权限认证_学习笔记1
  20. Python中的三元运算符

热门文章

  1. Spring @Configuration注解
  2. [JavaScript]WebBrowser控件下IE版本的检测
  3. 我的Android进阶之旅------>Android基于HTTP协议的多线程断点下载器的实现
  4. MySQL一些常见查询方式
  5. fedora25 安装sublime text3
  6. php验证复选框的小例子
  7. sql查询字段是否为空
  8. Data Structure Array: Given an array arr[], find the maximum j – i such that arr[j] > arr[i]
  9. 浮动float
  10. 小学生都能看懂的数位dp