os

<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="https://www.cnblogs.com/edisonchou/">Edison Zhou</a></h1>
     <h2>坚持学习,善于总结,乐于分享...</h2>
      
      
      
      
     </div><!--end: blogTitle 博客的标题和副标题 -->
     <div id="navigator">
      
     <ul id="navList">
     <li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/">博客园</a></li>
     <li><a id="blog_nav_myhome" class="menu" href="https://www.cnblogs.com/edisonchou/">首页</a></li>
     <li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
     <li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/Edison%20Chou">联系</a></li>
     <li>
     <!----></li>
     <li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
     </ul>
     <div class="blogStats">
      
     <div id="blog_stats">
     <span id="stats_post_count">随笔 - 335&nbsp; </span>
     <span id="stats_article_count">文章 - 1&nbsp; </span>
     <span id="stats-comment_count">评论 - 1946</span>
     </div>
      
     </div><!--end: blogStats -->
     </div><!--end: navigator 博客导航栏 -->
     </div><!--end: header 头部 -->
      
     <div id="main">
     <div id="mainContent">
     <div class="forFlow">
      
     <div id="post_detail">
     <!--done-->
     <div id="topics">
     <div class = "post">
     <h1 class = "postTitle">
     <a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/edisonchou/p/4996163.html">操作系统核心原理-1.操作系统导论</a>
     </h1>
     <div class="clear"></div>
     <div class="postBody">
     <div id="cnblogs_post_body" class="blogpost-body"><p><span style="font-family: 仿宋; font-size: 15px;"><strong>PS:操作系统原理是大学计算机专业最为重要的一门专业基础课程之一,对于操作系统核心原理的理解对于一个合格的程序员来说十分重要,于是我继续我的&ldquo;三大原理,两个协议,一种结构&rdquo;复习,三大原理中操作系统原理首当其冲,这里主要依靠阅读《操作系统之哲学原理》来进行复习,将其中重要的部分记录下来,与各位分享。当然,更推荐大家去读读这本书,相信都会有一定收获。</strong></span></p>
     <h1>一、程序是如何运行的?</h1>
     <h2>1.1 程序运行的四大要素</h2>
     <p>  (1)程序设计语言</p>
     <p>  首先,我们得使用一门程序设计语言进行编程,一般我们使用的都是高级程序设计语言(如C、C++、Java、C#等)。</p>
     <p>  (2)编译系统</p>
     <p>  我们写好了代码,但是由于计算机不认识高级语言编写的程序,需要编译成计算机能够识别的机器语言,这就需要编译器和汇编器的帮助。</p>
     <p>  (3)操作系统</p>
     <p>  机器语言程序需要加载到内存,才能形成一个运动中的程序(即进程),这就需要操作系统的帮助。</p>
     <blockquote>
     <p><strong>About:</strong>进程需要在计算机芯片即CPU上执行才算是真正在执行,而将进程调度到CPU上运行也是由操作系统完成的,这里也就不难理解为什么进程管理会在我们的教科书中排在最重要的位置了。</p>
     </blockquote>
     <p>  (4)指令集结构(计算机硬件系统)</p>
     <p>  在CPU上执行的机器语言指令需要变成能够在一个个时钟脉冲里执行的基本操作,这就需要指令集结构和计算机硬件的支持。</p>
     <h2>1.2 程序运行的基本流程</h2>
     <p>  基于上面提到的四大要素,我们可以得出下面一幅图,该图从一个线性角度展示了程序的演变过程,能够帮助我们理解整个程序是如何在计算机上执行的。</p>
     <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151125230742109-860597116.jpg" alt="" width="654" height="355" /></p>
     <p>  事实上,程序可以执行在机器语言或汇编语言上编写,用这种被称为&ldquo;低级&rdquo;(我更愿意称其为底层)的语言编写出来的机器语言程序无需经过编译器的翻译就可以在计算机指令集上执行。如果是在汇编语言上编写的汇编程序,则只需要经过汇编器的翻译即可加载执行。</p>
     <h1>二、操作系统是什么?</h1>
     <h2>2.1 两个问题</h2>
     <p>  (1)操作系统到底是什么鬼?</p>
     <p>  操作系统是介于计算机和应用软件之间的一个软件系统,操作系统的上层和下层都有其他的对象存在:</p>
     <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151125231752562-1665529811.jpg" alt="" width="377" height="160" /></p>
     <p>  从上图可以看出,OS上边是应用软件,下边是硬件平台。</p>
     <p>  (2)操作系统到底操控什么事?</p>
     <p>  最原始的计算机并没有OS,直接由人来掌管事情。随着计算机复杂性的增长,人已经不能胜任直接掌控计算机了。于是,OS这个软件被编写出来帮我们掌控计算机,使人类从日益复杂的掌控任务中解脱出来。既然OS是专门掌控计算机的,那么计算机上发生的所有事情都需要OS的知晓和认可,未经OS同意的任何事情均被视为非法的(想想病毒和入侵攻击者试图做的事情)。</p>
     <h2>2.2 两种角色</h2>
     <p>  (1)魔术家</p>
     <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151125232314593-428104119.jpg" alt="" /></p>
     <p>  魔术家的目标是把差的东西变好,把少的东西变多,把复杂变简单。同样,OS将计算机以一个更加容易、更加方便、更加强大的方式呈现给用户。</p>
     <blockquote>
     <p><strong>Example:</strong>OS通过进程抽象让每一个用户感觉有一台自己独享的CPU,通过虚拟内存抽象,让用户感觉物理内存空间具有无限扩张性,这就是把少变多的一个实例。</p>
     </blockquote>
     <p>  (2)管理者</p>
     <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151125232734609-2007750775.png" alt="" width="384" height="197" /></p>
     <p>  操作系统管理计算机上的软硬件资源,如CPU、内存、磁盘等,使得不同用户之间或者同一用户的不同程序之间可以安全有序地共享这些硬件资源。</p>
     <p>  那么,问题来了,如何让用户很好地利用这些硬件资源呢?这就是分块(Parcel Out),把硬件分块给应用程序使用。这就涉及到有效和公平的原则,这也是一个管理者的必备素质,更是设计操作系统时的不懈追求!</p>
     <p>  操作系统的两个角色之间既有区别又有联系,为了完成不同的任务,OS有时需要扮演魔术师,有时有需要扮演管理者,还有时需要同时扮演两个角色。</p>
     <h1>三、操作系统的范畴</h1>
     <h2>3.1 CPU管理</h2>
     <p>  即<strong>如何分配CPU给不同应用和用户</strong>,对于进程管理坚持三个目标:一是公平(每个程序都有机会使用CPU),二是非阻塞(任何程序不能无休止地阻挠其他程序的正常推进),三是优先级(优先级高的程序开始运行则优先级低的就需要让出资源&mdash;&gt;让一部分人先富起来)。</p>
     <h2>3.2 内存管理</h2>
     <p>  即<strong>如何分配内存给不同应用和用户</strong>,主要管理缓存、主存、磁盘、磁带等存储介质所形成的内存架构。其目的主要有二:一是将少变多(比如虚拟内存的使用能够使得运行程序的大小大大地增加),二是让多个程序共享同一个物理内存(这就需要对物理内存进行分割和保护,不让一个程序访问另一个程序所占的内存空间,专业术语称为运行时不能越界访问)。</p>
     <h2>3.3 外存管理</h2>
     <p>  即<strong>如何分配外存(磁盘)给不同应用和用户</strong>,外存管理也称存储管理,也就是我们所说的文件系统,其目的是将磁盘变为一个很容易使用的存储介质以提供给用户使用。</p>
     <h2>3.4 I/O管理</h2>
     <p>  即<strong>如何分配输入输出设备给应用和用户</strong>,也称为设备管理,也就是管理输入输出设备。其目的主要有两个:一是屏蔽不同设备的差异性(用户用同样的方式访问不同的设备,从而减低编程的难度),二是提供并发访问(即将那些看上去并不具备共享特征的设备如打印机变得可以共享)。</p>
     <p>  操作系统的四个核心功能如下图所示:</p>
     <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151126000647827-1935259847.jpg" alt="" width="254" height="254" /></p>
     <h1>四、小结</h1>
     <p>  操作系统的技巧也应用于很多领域,如抽象、缓存、并发等。操作系统简单说来就是<span style="color: #ff0000;"><strong>实现抽象</strong></span>:进程抽象、文件抽象、虚拟存储抽象等。而很多领域都会使用抽象,例如数据结构和程序设计(抽象数据类型?抽象类?);很多地方也会用到缓存,例如开发Web应用程序时使用缓存降低数据库访问压力,加快页面响应速度等等。更为重要的是,对于一个程序员来说,要想知道计算机在软件层面是怎么运转的,就得学习操作系统。</p>
     <h1>参考资料</h1>
     <p><img src="https://www.icode9.com/i/i/?n=15&i=blog/381412/201511/381412-20151125223110077-842709175.jpg" alt="" width="131" height="170" /></p>
     <p>邹恒明,《操作系统之哲学原理》,机械工业出版社</p>
     <p>&nbsp;</p>
     <div id="Copyright">
     <p><span style="font-size: 14px;">作者:<a href="http://www.cnblogs.com/edisonchou/">周旭龙</a></span></p>
     <p><span style="font-size: 14px;">出处:<a href="http://edisonchou.cnblogs.com" target="_blank">http://edisonchou.cnblogs.com</a></span></p>
     <p><span style="font-size: 14px;">本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。</span></p>
     </div></div><div id="MySignature"></div>
     <div class="clear"></div>
     <div id="blog_post_info_block">
     <div id="BlogPostCategory"></div>
     <div id="EntryTag"></div>
     <div id="blog_post_info">
     </div>
     <div class="clear"></div>
     <div id="post_next_prev"></div>
     </div>
      
      
     </div>
     <div class = "postDesc">posted @ <span id="post-date">2015-11-26 00:09</span> <a href='https://www.cnblogs.com/edisonchou/'>Edison Chou</a> 阅读(<span id="post_view_count">...</span>) 评论(<span id="post_comment_count">...</span>) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=4996163" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(4996163);return false;">收藏</a></div>
     </div>
     <script type="text/javascript">var allowComments=true,cb_blogId=110406,cb_entryId=4996163,cb_blogApp=currentBlogApp,cb_blogUserGuid='07e29612-5364-e111-aa3f-842b2b196315',cb_entryCreatedDate='2015/11/26 0:09:00';loadViewCount(cb_entryId);var cb_postType=1;var isMarkdown=false;</script>
      
     </div>

 

上一篇:mysql安装


下一篇:Appium在Android7.0及以上系统运行时报错的解决方案