《linux内核设计与实现》第一章
第一章Linux内核简介
一、unix
1、Unix的历史
Unix是现存操作系统中最强大和最优秀的系统。
——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物。
——1973年整个Unix操作系统用C语言进行重写,给后来unix广泛移植铺平道路。
——1977年伯克利推出第一个Unix演化版1BSD系统。
——1979年伯克利真正独立开发的Unix系统3BSD。
2、Unix的特点
简洁:仅提供几百个系统调用并有一个非常明确的设计目的。
抽象:在Unix中所有东西都被当做文件对待,这种抽象使对数据和对设备的操作是通过一套相同的系统调用接口来进行的:open()、read()、write()、lseek()、close()。
可移植:用C语言编写内核和相关的系统工具软件,使其在各种硬件体系架构面前都具备令人惊异的移植能力,使开发人员易接受。
进程创建迅速 : 有独特的fork()系统调用。
一次执行保质保量地完成一个任务:简单的进程间通信元语把单一目的的程序方便地组合在一起,这种策略和机制分离的理念确保了Unix系统具备清晰的层次化结构。
如今,Unix已经发展成一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。
二、linux简介(linux=linux内核)
1.linux历史
1991年,linux诞生。
Linux是类Unix系统,借鉴了Unix的许多设计并且实现了Unix的API。但是Linux没有直接使用Unix的源代码,但它没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致。
Linux是一个非商业化的产品,是一个互联网上的协作开发项目,linux内核是自由(公开)软件,但并不是无限自由,受条款限制。
Linux用途广泛,包含的东西也名目繁多。linux系统的基础是内核、C库、工具集和系统的基本工具。
三、操作系统和内核简介
操作系统:是指整个系统中负责完成最基本功能和系统管理的部分。
包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
系统:包含了操作系统和所有运行在他之上的应用程序。
内核:是操作系统的核心。通常被称作:管理者或操作系统核心。
通常一个内核由负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理进程地址空间的内存管理程序和网络、进程之间通信等系统服务程序共同组成。
系统态:拥有受保护的内存空间和访问硬件设备的所有权限。
内核空间:这种系统态和被保护起来的内存空间。
用户态:应用程序在用户空间执行,系统以用户态进入用户空间执行,只能看到允许它们使用的部分系统资源,并只使用某些特定的系统功能,不能直接访问系统硬件,也不能访问其他的内核划给别人的内存范围。
系统中运行的应用程序通过系统调用来与内核通信。应用程序经常调用库函数,再由库函数再由系统调用界面,让内核代其完成各种不同的任务。
应用程序通过系统调用界面陷入内核,是应用程序完成工作的基本行为方式。
中断机制:当硬件设备想和系统通信的时候,首先发出一个异步的中断信号打断处理器的执行,继而打断内核的执行。中断通常对应一个中断号,内核通过中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。
每个处理器在任何指定时间点上的活动必然是以下三者之一:
运行于用户空间,执行用户进程
运行于内核空间,处于进程上下文,代表某个特定的进程执行
运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
四、Linux内核和传统Unix内核的比较
1、Unix内核特点
是一个不可分割的静态可执行库。以巨大、单独的可执行块的形式在一个单独的地址空间中运行。Unix内核通常需要硬件系统MMU(页机制)以管理内存。这种页机制可以加强对内存空间的保护,并保证每个进程都可以运行
于不同的虚地址空间上。
2、单内核与微内核设计之比较
操作系统分为单内核、微内核(外内核主要用于科研系统)。
单内核:把它从整体上作为一个单独的大过程来实现。
微内核:功能被划分为多个独立过程每个过程叫做一个服务器。
Linux是一个单内核,即内核运行在单独的内核地址空间上。而且Linux吸取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力,避免了微内核设计上的性能损失的缺陷。
至今Linux是模块化的、多线程的以及内核本身可调度的操作系统。
Linux内核和传统Unix内核的差异:
- Linux支持动态加载内核模块
- Linux支持对称多处理(SMP)
- Linux内核可以抢占
- Linux不区分线程和进程
- Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统
五、Linux内核版本
Linux内核有两种:稳定的和处于开发中的。稳定的内核具有工业级的强度,可以广泛应用和部署。
Linux命名机制(可用于区分稳定的和处于开发中的内核):
第一个数字是主版本号,第二个是从版本号,第三是修订版本号,最后是稳定版本号。
如果稳定版本号是偶数,则内核是稳定版;如果是奇数,内核就是开发版。
六、总结
第一次接触linux有很多不懂,不过不能因为困难就不学习,从基础做起,跟着视频结合课本,争取每一天都取得一点进步。
《linux内核设计与实现》第一章的更多相关文章
- 流畅的python学习笔记:第一章
这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法.比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法 首先介绍下Tuple和nametup ...
- Python之旅_第一章Python入门
一.编程语言分类 1.机器语言:即计算机能听懂的二进制语言,0000 0001,直接操控硬件: 2.汇编语言:简写的英文标识符代替二进制语言,本质同样是直接操控硬件: 3.高级语言:用更贴近人类的语言 ...
- 【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表
这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解 NLTK 介绍:NLTK是一个构建Python程序以处理人类语言数据的 ...
- python 机器学习基础教程——第一章,引言
https://www.cnblogs.com/HolyShine/p/10819831.html # from sklearn.datasets import load_iris import nu ...
- 《Python基础教程》第一章:基础知识
如果希望只执行普通的除法,可以在程序前加上以下语句:from __future__ import division.还有另外一个方法,如果通过命令行运行Python, 可以使用命令开关-Qnew.此时 ...
- Python核心编程2第一章课后练习
1-1 在windows下的安装方法在网上下载python2.7直接安装到C盘1)在系统变量中找到path. 2)编辑path值,添加你安装的python路径,C:\Python27. 3)检验pyt ...
- python cookbook学习笔记 第一章 文本(1)
1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t', 'h', 'e', 'S', 't', 'r', 'i ...
- Python基础教程笔记 第一章
/ 表示整除,当导入_future_模块中的version时,/ 表示正常的的除法, 此时可用//表示整除,不论数字是整型还是浮点型,都可以用//表示整除. ** 表示幂次方 例如 2**3 ...
- python cookbook学习笔记 第一章 文本(2)
1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...
- 《Python自然语言处理》第一章-练习17
问题描述: 使用text9.index()查找词sunset的索引值.你需要将这个词作为一个参数插入到圆括号之间.通过尝试和出错的过程中,找到完整的句子中包含这个词的切片. 解题思路: 用两个集合,一 ...
随机推荐
- 【Android自动化】Subprocess.check_output()简单用法
# -*- coding:utf-8 -*- import os import sys import subprocess from uiautomator import device as d cm ...
- python第三十二课——栈
栈:满足特点 --> 先进后出,类似于我们生活中的子弹夹 [注意] 对于栈结构而言:python中没有为其封装特定的函数,我们可以使用list(列表)来模拟栈的特点 使用list对象来模拟栈结构 ...
- NOI 2018网络同步赛(游记?)
刚中考完那段时间比较无聊,报名了一个同步赛,报完名才发现成绩单是要挂到网上的,而且因为报的早给了一个很靠前的考号...那布星啊,赶紧学点东西,于是在一周内学了网络流,Treap以及一些数论. Day1 ...
- find和find_if
find函数 是在一个迭代器范围内查找特定元素得函数,可将将他用于任意容器类型得元素.这个函数返回的是所找元素得引用,如果没有找到元素就会返回这个容器得尾迭代器. #include <iostr ...
- JDK1.8源码分析之HashMap
一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...
- JAVA框架Struts2(二)
一:Struts2执行流程: 1)编写页面,点击超链接,请求提交到服务器端. 2)请求先经过Struts2核心过滤器(StrutsprepareAndexectuterfilter). 3)过滤器的功 ...
- mybatis的一对一,一对多查询,延迟加载,缓存介绍
一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...
- STM32 中 BIT_BAND(位段/位带)和别名区使用入门(转载)
一. 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 :这样就把 ...
- .NET Core中向已存在文件的特定位置写入数据
本例使用.NET Core向一个文本文件中的特定位置写入数据,来模拟文件上传中的断点续传是如何在服务器端实现的. 新建一个.NET Core控制台项目FileContinueToWrite,其Prog ...
- 【webstorm】免费使用
http://idea.imsxm.com/ 测试过ok 后期追加(20180316更新为) http://idea.codebeta.cn/ 后期追加(20180502更新为) http ...