您的位置:首页 > 理论基础

Linux 基础一之计算机原理、内核原理、发展历程

2015-08-18 22:32 387 查看
很多同学疑惑学习LINUX为什么要学习计算机原理,这是因为操作系统跟硬件有相当程度的关联性。所以,如果不了解一下计算机的概念,要很快的了解Linux的概念是有点难度的。所以在学习[b]Linux之前了解一下计算机原理和[b]Linux内核方面的相关知识是很有必要的。[/b][/b][b][b] 由于以下为知识点的梳理。仅仅列出了单方面的一些概念。并没有连贯的知识点。所以推荐以下链接供大家参考:
[/b][/b][b][b] 马哥51cto的视频:http://edu.51cto.com/roadmap/view/id-2.html [/b][/b][b] 鸟哥的linux私房菜:http://vbird.dic.ksu.edu.tw/ [/b]计算机五大部件:
1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命z令等信息,并在需要时提供这些信息。
4. 输入(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合你为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
5. 输出(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。

计算机五大部件的通信

计算机系统里的总线(bus): 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。


CPU指令集的作用: 指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。Intel有x86x86-64,MMX,SSE,SSE2SSE3,SSSE3 (Super SSE3),SSE4.1SSE4.2和针对64位桌面处理器的EM-64T。AMD主要是3D-Now!指令集。对电脑下达的每一个命令都需要CPU根据预先设定好的某一条指令来完成。 这些预先设定好的指令是预存在CPU中的。CPU依靠外来指令“激活”自己内存的指令,来计算和操控电脑。 每款CPU在设计时就规定了一系列与电脑其它部件相配合的指令系统。 预先存储的指令越多,CPU越“聪明”。可以做的“动作”越多。预先存储的指令越先进,CPU就越高级。多个指令集中在一起,通常叫指令集,这就是指令集的作用!
CPU的指令级别(RING0,RING1,RING2,RING3): 这得从CPU指令系统(用于控制CPU完成各种功能的命令)的特权级别说起。在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令(用户指令),对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,特权指令就是那些儿童不宜的东东,而非特权指令则是老少皆宜。

CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,只能提交操作系统来完成执行。

计算机语言(机器语言,汇编语言和高级语言):
计算机语言通常是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的“符号系统”。

高级语言(是一种人工设计的语言,它对具体的算法进行描述,所以又称为算法语言。高级语言独立于计算机的硬件,即与具体的硬件无关)
| (编译)
汇编语言(用有助于记忆的符号和地址符号来表示指令,便是汇编语言,也称为符号语言。一般称汇编语言为低级语言)
| (汇编)
机器语言(机器语言是最初级且依赖于硬件的计算机语言。机器语言可直接在计算机上执行(即为二进制形式),运算速度快。)

编程语言: 汇编语言:微码编程 系统中某些与硬件相关的特有代码、驱动程序开发 高级语言C,C++: 系统级应用、驱动程序 高级应用java,python,php: 应用程序

操作系统(内核管理):

os:operator system(操作系统,由c和汇编语言开发的软件程序)
通用目的:将底层的各种硬件资源抽象为一种统一接口
硬件驱动
进程管理
内存管理
网络管理
安全管理



操作系统的角色

编程层次: 1、硬件规格:hardware specifiacation 2、系统调用:System Call 3、库调用:library call




库调用,系统调用,内核和硬件的关联

用户与主机交互,必然用到的设备(终端)
物理终端:直接接入本机的显示器和键盘设备;/dev/console
虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端,CentOS 6默认启动6个虚拟终端。可以通过以下方式切换虚拟终端:Ctrl+Alt+F#: [1,6]
图形终端:附加在物理终端之上的以软件方式虚拟实现的终端,但额外会提供桌面环境;
设备文件路径:/dev/tty#

模拟终端:图形界面下打开的命令行接口,基于ssh协议或telnet协议等远程打开的界面
设备文件:/dev/pts/# [0,oo)

查看当前的终端设备:
#tty
交互式接口:启动终端后,在终端设备附加一个交互式应用程序

UI(用户界面):
GUI:Graphic User Interface(图形用户界面)
X protocol, window manager, desktop
Desktop:
GNOME (C, gtk)
KDE (C++, qt)
XFCE (轻量级桌面)
CLI:Command Line Interface(命令行界面)
shell程序:
sh (bourn)
csh
tcsh
ksh (korn)
bash (bourn again shell), GPL
zsh
查看当前系统支持的shell:
#vim /etc/shells
#echo $SHELL


ABI:Application Binary Interface
API:Application Programming Interface
linux写的程序,原代码可以在windows上运行(API相同),编译成二进制代码则不行(ABI不行)

程序运行模式:
用户空间:user space ,us
内核模式:system space
在多任务环境中,有许多进程都不允许应用程序去做。所以CPU以两种模式运行,即用户模式和内核模式。
①内核模式
当CPU运行于内核模式时,一切程序都可运行。任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚地址和控制虚拟内存硬件。这种模式对应80×86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。
②用户模式
这个模式中,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查。这就允许WindowsNT4.0限制任务对各种I/O操作的访问,并捕捉违反系统完整性的任何行为。在用户模式中,运行的代码如果不通过操作系统中的某种门机制,就不能进入内核模式。在80×86处理器上,这个模式对应于 ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别



用户模式和内核模式

POS:Portable Operation System
POSIX (可移植操作系统接口,Portable Operating System Interface)
API:编程接口
运行程序格式:
Windows:EXE,dll(dynamic link library)
Linux :ELF,so(shared object)
程序:指令+数据
指令:只读
数据:读写
程序:算法+数据结构
库调用,系统调用:允许被调用的程序:malloc(),free()

Linux发展历史: Linux的核心是由Linus Torvalds在1991年的时候给他开发出来的, 并且丢到网络上提供大家下载,后来大家觉得这个小东西(Linux Kernel)相当的小而精巧, 所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!
Linux其实就是一个操作系统最底层的核心及其提供的核心工具。 他是GNU GPL授权模式,所以,任何人均可取得原始码与可执行这个核心程序,并且可以修改。 此外,因为Linux参考POSIX设计规范,于是兼容于Unix操作系统,故亦可称之为Unix Like的一种。 怪的是,托瓦是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的2.0推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了Linux的吉祥物了......
Linux: Linus ―― Linux GNU/LinuxUnix: System:(Bell Lab) AIX(IBM) Solars(SUN) HP-UX(HP) BSD:(BSRG)Berkeley System Distribution NetBSD OpenBSD FreeBSD
MIT:Richard Stallman GNU:GUN is Not Unix GPL:General Public License

Linux的发行版:
为了让使用者能够接触到Linux,于是很多的商业公司或非营利团体, 就将Linux Kernel(含tools)与可运行的软件整合起来,加上自己具有创意的工具程序, 这个工具程序可以让用户以光盘/DVD或者透过网络直接安装/管理Linux系统。 这个『Kernel + Softwares + Tools的可完全安装』的咚咚,我们称之为Linux distribution

slackware:
suse
sles
opensuse
debian:
ubuntu
mint
redhat:
rhel:redhat enterprise linux
每18个月发行一个新版本
Centos:兼容rhel的格式
fedora:每6个月发行一个新版本
ArchLinux
Gentoo
LFS:Linux From scrotch
Android:kernel + busybox + java虚拟机



Linux可完全安装发布套件
底下列出几个主要的Linux distributions发行者网址:(复制:鸟哥linux私房菜)Red Hat: http://www.redhat.com
Fedora: http://fedoraproject.org/
Mandriva: http://www.mandriva.com
Novell SuSE: http://www.novell.com/linux/
Debian: http://www.debian.org/
Slackware: http://www.slackware.com/
Gentoo: http://www.gentoo.org/
Ubuntu: http://www.ubuntu.com/
CentOS: http://www.centos.org/
Open Source (开放源码)

软件以Open Source的方式释出时,表示除了可执行的软件本身外,一定伴随着原始码的释出喔!通常Open Source的软件有几个好处:程序设计师通常会等到程序成熟之后才会释出,所以通常程序在雏形的时候,就已经具有相当的优良体质;

Open Source的精神,相信当程序原设计人将程序原始码释出之后,其他的程序设计师接受这份原始码之后, 由于需要将程序改成自己所需的样式,所以会经由本身的所学来加以改良,并从中加以改良与除虫, 所以程序的debug功能会比传统的close source来的快!

由于程序是伴随原始码的,因此,系统将会不易存在鲜为人知的木马程序或一些安全漏洞, 相对而言,会比较更加的安全!

Open source的代表授权为GNU的GPL授权及BSD,Apache等等GNU:GPLv2,GPLv3,LGPL(lesser)
http://baike.baidu.com/view/130692.htm
Apache:apache协定
http://baike.baidu.com/subview/28283/5990593.htm#viewPageContent
BSD:bsd
http://baike.baidu.com/view/209692.htm#3

本文出自 “马尔高” 博客,请务必保留此出处http://kgdbfmwfn.blog.51cto.com/5062471/1685723
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: