谢烟客-----Linux入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了     谢烟客-----Linux入门相关的知识,希望对你有一定的参考价值。

为什么要学习 Linux

    2050年人工智能或将超越人类智商,机器人产生了自主意识,,完全取代人脑思维甚至统治人类,或许....

    有人说:windows是漂亮的,Linux是智慧的、透明的。

    全球TOP500超级计算机排行榜中99%都是linux内核。

    任何手持智能终端设备就连电子表的底层都是Linux

    你或许会认为Windows更为易用,Linux操作起来很慢,Linux入门曲线陡峭,其实当我们学会一些命令之后,一个命令所完成的事,Windows中需要几次步骤才能完成。

    基于命令行,执行速度快,工作效率高

    Linux系统遵循GPL协议,属于开源软件,你能用任意姿势获取源代码,修改源码,学习源码,而且Linux有自己的开源社区,能在上面开拓视野,接触许多科学前沿的东西。

 

计算机的组成、虚拟机的原理、操作系统基础


冯诺依曼体系结构

    

    冯·诺伊曼明确提出了计算机的体系架构,1951年第一台电子计算机EDVAC开始,计算机经历了多次的更新换代,不管是最原始的、还是最先进的计算机,使用的仍然是冯·诺依曼最初设计的计算机体系结构。因此冯·诺依曼被世界公认为“计算机之父”,他设计的计算机系统结构,称为“冯诺依曼体系结构”。


    结构及框架

技术分享

        运算器:用于完成各种算术运算、逻辑运算和数据传送等数据加工处理。

控制器:用于控制程序的执行,是计算机的大脑。运算器和控制器组成计算机的中央处理器(CPU)。控制器根据存放在存储器中的指令序列(程序)进行工作,并由一个程序计数器控制指令的执行。控制器控制计算器各部件的协调

存储器:用于临时存放程序和数据,运算器运算结果,保存的位置。例如:内存。程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。

输入设备:用于将数据或程序输入到计算机中,例如:鼠标、键盘。

输出设备:将数据或程序的处理结果输出至指定设备,例如:显示器、打印机。

       

总线的组成

     数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus),也统称为系统总线。

            DB 用于数据交换的总线

            AB  用来传送地址的总线,地址总线的位数决定了CPU可直接寻址的内存空间大小,一般说来,若地址总线为n位,则可寻址空间为2^n字节

     CB 传送控制信号时序信号。有的是微处理器送往存储器和I/O接口电路,也有是其它部件反馈给CPU的,控制总线的传送方向由具体控制信号而定,(信息)一般是双向的,控制总线的位数要根据系统的实际控制需要而定。实际上控制总线的具体情况主要取决于CPU。

前端总线(FSB)是将CPU连接到北桥芯片的总线,前端总线(FSB)频率(即总线频率)是直接影响CPU与内存直接数据交换速度。


缓存

cpu 4GHZ 内存 1600/1800MHZ,(单位换算:1GHZ=1000MHZ)内存大约1.56GHZ,CPU的速度远远超过内存的速度,由短板理论终的速度为内存的速度。

缓存以CPU频率工作,价格高,所以很小。

主要意义:

时间局部性  当某个数据被访问过一次之后,过不了多久时间就会被再一次访问。缓存对此数据缓存

空间局部性 CPU在某一时刻需要某个数据,那么很可能下一步就需要其附近的数据;缓存将对附近的资源缓存


硬盘

    固态硬盘

        在不同的分区的读取速度一致

    机械硬盘

    

技术分享

盘片(disk):硬盘中承载数据存储的介质。两面读写

磁头(head):通过磁性原理读取磁性介质上数据的部件。

磁道(tracle):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。

扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位

分区:由外向内按柱面划分,外道长:固定角速度,单位时间内划动的距离越长

C在外道,单位时间内,读取的数据越多

D在较内道,单位时间内,读取的数据越少


虚拟机的原理


虚拟机的框架:

技术分享

vmware程序:虚拟出多个虚拟的计算机(CPU+内存+硬盘)

 

虚拟CPU

切割CPU时间片

cpu将时间片切割,使各个程序从表面上看是同时进行的。在微观上:每几个毫秒思考一件事,时间用完如果进程仍在执行,就记录进程的状态,连续运行后面的进程。

内存:有限内存切割后,分配给不同程序使用

线性地址空间:假设每个程序有4G内存可用,实际只有自己占据的大小


技术分享

        进程地址空间: 将内存上不连续的内存页在逻辑上映射为一段连续的空间


I/O设备:模拟器实现:动态分配大小







操作系统的基础

    CPU: 晶体管 10-20nm 45nm工艺 门电路 逻辑运算/算术、逻辑运算,芯片、多个针脚,每个针脚有不同的功能、完成不同的运算。调用针脚即可完成运算,调用CPU针脚完成运算:机器语言

    CPU针脚的功能即为CPU的指令,CPU多个指令叫指令集

    指令的分类:普通指令特权指令

技术分享

    

普通指令:普通用户仅能在环3上运行,如果要用到环0的指令,就需要向内核申请,即为发起系统调用


特权指令:仅管理员可运行的指令,用于管理功能。


CPU常见平台

    IBM(power)

    SUN (ultrasparc)--> Oracle

    惠普 (alpha)(安腾)dec-康白-惠普

    Intel (x86,X86_64) 向下兼容

    AMD (amd64)

    ARM Intel只设计,不生产。三星,高通生产

    Andorid (linux)

    ios (UNIX)

    摩托摩拉 (手持 m68k,服务器 m68k nommu)

    苹果,IBM,摩托摩拉 (powerpc,早期的强悍的CPU)


    天河二号:大堆CPU拼凑而成

    

面向硬件写程序所用的语言:    

   机器语言过于底层。每个芯片生产完成时,附带一套略微高级的接口(微码编程接口,汇编语言),比较底层,写大型程序困难。高级语言(c,c++)


低级和高级语言所写的程序的区别

低级语言:汇编语言,计算机容易理解的语言,运行起来的性能更好    

高级语言:c,java,python,...,计算机不易理解的语言,运行起来性能差


由于是面向硬件写程序,考虑CPU平台,内存分配,...诸多问题。研发出操作系统

目的: 消除底层差异,程序员面向硬件写程序不用考虑各种硬件相关的问题

功能: 抽象计算机的计算能力为统一的接口,将底层硬件功能封装为系统调用(syscall),协调进程占用内存资源与CPU时间的分配。

作用:

硬件驱动:硬件工作起来

进程管理:CPU时间片切割和CPU的计算能力分配给不同的程序

内存管理:将有限的内存资源分配给多个同时运行的程序

网络管理:与其他主机通过网络通信

安全管理

写程序面向的对象和语言

    硬件规格: 机器语言、汇编语言、高级语言,考虑CPU平台,内存分配,...诸多问题    

   系统调用:  高级语言,system call 将底层硬件规格抽象为syscall,保证syscall少,库也比较底层

    库调用:   高级语言,面向 syscall 封装的库 ,将底层库抽象出的库(c)


用形象化的思维:

面向硬件:给你的是"麦种",要想吃馒头,经过的步骤: 翻地、播种、浇水、施肥、收割、磨面、做包子、蒸馒头。

面向系统调用:给你的是面粉,

面向库调用: 给你你的是馒头,

      技术分享      

    越高层,写程序越容易,选择更多样。

    越低层,写程序越难,选择更少。



注意:写出的程序为源码程序






程序运行前的步骤

    源码程序--> 编译 --> 汇编 --> 二进制指令(能调用对应CPU平台的针脚,不同系统有不同的格式)


二进制指令如何运行


    由操作系统分配资源,让程序占据CPU时间片内存资源 

    指令:被操作系统调度至CPU上,二进制指令能调用CPU上的某个指令(针脚),完成某些功能

技术分享

用户接口

跟操作系统交互的程序,称之为"用户接口":指挥其他程序的运行

windows: 桌面

Linux: UI

GUI:Graphic User Interface,程序:Gnome,XFCE,KDE

CLI: Command Line Interface,程序: sh,csh,ksh,zsh,bash

  

在不同的系统之上写的程序(源码)

ABI Application Binary Interface:  源码制作成二进制的格式(可执行文件的格式),运行接口,应用二进制格式。终端用户面向的接口。

API Application Program Interface:  写程序面向的对象,应用编程接口,程序员面对的接口


ABI不能兼容:

不同操作系统上的程序,制作成二进制后,不能兼容,(转换为对应平台调用CPU针脚的指令,不同CPU厂商生产的CPU针脚不同,所以程序调用的针脚不同)


API不能兼容:

写程序面向的对象不同,不同操作系统提供的systemcall,libcall接口不同一个系统上写的程序,不能在另一个系统之上编译~~~


API兼容:    

写程序面向的对象不同,但是提供的Systemcall,libcall接口能够兼容(底层针脚不同,但是经过操作系统抽象硬件功能为兼容的接口,所写的程序在源码级别兼容,这就是遵循‘POSIX‘规范一个系统上写的程序,能在另一个系统之上编译~~~,编译后只能在对应平台运行,不能跨平台运行,ABI不同


操作系统的定义:

    广义:windows系统,我们所指的是用户接口(windows桌面、Linux bash)和内核

    狭义:内核





    

本文出自 “Reading” 博客,请务必保留此出处http://sonlich.blog.51cto.com/12825953/1951699

以上是关于     谢烟客-----Linux入门的主要内容,如果未能解决你的问题,请参考以下文章

谢烟客---------Linux之find查找

谢烟客---------Linux之Bash基础特性

谢烟客---------Linux之bash脚本编程---选择执行

     谢烟客-----Linux入门

谢烟客---------Linux之grub应用

谢烟客---------Linux之总结Linux基础