操作系统
1、简介
OS: Operating System,通用目的的软件程序
操作系统的内核(kernel)
  操作系统其实也是一组程序。这组程序的重点在于管理计算机的所有活动及驱动系统中的所有硬件;
  总之硬件的所有操作都必须要通过这个操作系统来完成;
  内核主要在于管理硬件与提供相关的能力。因此,内核程序放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

内核的功能:系统调用接口、程序管理、内存管理、文件系统管理、设备驱动

操作系统(OS)分类:
  服务器OS:RHEL、CentOS、WindowsServer、AIX
  桌面OS:Windows 10、Windows 7、Mac OS、Fedora
  移动设备OS:Andriod、IOS、YunOS

开发接口标准
  ABI:Application Binary Interface(应用程序二进制接口)
    ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
  软件要想在操作系统上运行,必须要符合此操作系统兼容的ABI接口
  ABI接口由操作系统决定,不同的操作系统ABI接口是不相同的

API:Application Programming Interface(应用程序编程接口)
    API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。

POSIX: Portable Operating System Interface(可移植操作系统接口)
    IEEE在操作系统上定义的一系列API标准
    POSIX兼容的程序可在其它POSIX操作系统编译执行

运行程序格式:
    Windows: EXE、.dll(dynamic link library)、.lib
    Linux: ELF、.so(shared object)、.a

注意:
  Unix-like:Unix类的操作系统
  Linux、BSD、AIX...Unix类的操作系统ABI和API是兼容的

2、库、系统调用、操作系统和硬件之间的关系
硬件设备与操作系统(OS)
  操作系统的一部分功能就是管理硬件设备,它拥有硬件设备的所有权限,并且把硬件设备包装隐藏起来。完成所有硬件设备的资源管理和驱动
  资源切割,为每个程序提供一个虚拟的,独有访问的一块硬件资源,如:内存块,CPU的时间片和磁盘空间等
  而运行在这块资源上的程序除了知道监控它的操作系统外,不会知道其实还有其它的程序在运行,这就是多任务操作系统
  运行在操作系统上面的程序,不用管硬件是怎么驱动和管理的
  如果每写一个程序都要把驱动硬件的功能写上会是一种什么概念,所以,为了使人们能够以更方便、更容易理解的方式提供给程序使用硬件的目的,出现了系统调用。

操作系统与系统调用接口
  操作系统会把一些内核指令通过一些函数(接口)分享出来, 而这个接口就叫作系统调用。 程序只要调用这个接口就可以执行某些硬件动作
  操作系统掩盖了硬件特性,而以更简便的方式把使用硬件的方式向上提供给程序, 怎么向上提供呢, 就是用系统调用接口
  但是这些接口功能简单,很底层,还需要程序员来为这些功能简单的接口通过编程来组合出来复杂的功能,而这个很难,很复杂,而且程序每个都必须要这样作,那就更难了。关键是这些程序可能需要实现的调用接口的功能都是一样的。 所以就引出来了库。

系统调用接口与库
  这个库就是系统调用接口之上的再次封装来实现某些特殊的复杂的功能的接口。
  简单的说:库就是把各个系统调用的接口的单一的功能,组合起来,来实现一些复杂的,有趣的功能。而它还制作了一个接口,可以被其它程序调用。 库就是一个程序。
  库接口也被称为API(Application Programming Interface,应用程序编程接口)

总结:
  因为不能每一个程序都要来驱动硬件设备,所以有了操作系统这个中间层;操作系统提供系统调用接口供程序员编程。而程序也是通过这个接口来达到使用硬件的目地,而不用管操作系统是怎么操作硬件的。
  因为系统调用接口提供的的功能单一,数量少,需要程序员繁杂的操纵和组合这些接口来实现功能。而且要实现的这个功能,不止就一个程序要用,所以就有了库, 库就是实现了这个功能的程序,而这个库提供了一个接入点接口, 这个接入点就是API。程序员要想使用这个库的功能,只要按照库的说明来接入就可以了。程序通过库来达到目的, 而不用管库是怎么工作的。

一个模块一个模块的对接,复杂功能分层化;附图:

分层结构图:

3、编程语言
低级语言:
  机器语言:0和1
  汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发

中级语言:C
  系统级应用、驱动程序

高级应用:java、Objective-C、C#、python、php
  应用级程序开发

Linux起源及哲学思想
1、服务器操作系统
Windows、Linux(GNU/Linux)、Unix

2、Linux起源及发行版本
Linux起源
  1984年:Richard Stallman发起GNU项目和自由软件基金会
  创建开源的UNIX实用工具版本
  创建通用公共许可证(GPL)开源软件许可实施原则

1991年:Linus Torvalds发布Linux
  创建开放源码,类Unix的内核,在GPL下发布
  下载:www.kernel.org

Linux操作系统:
  Linux内核 + GNU工具集 = 完整的类UNIX操作系统
  如:CentOS、Ubuntu、Android

Linux发行版本
  Slackware:SUSE Linux Enterprise Server (SLES)
    OpenSUSE桌面
  Debian
    Ubuntu、mint
  RedHat
    RHEL: RedHat Enterprise linux 每18个月发行一个新版本
    CentOS:兼容RHEL的格式
    中标麒麟:中标软件
    Fedora:每6个月发行一个新版本
  ArchLinux:轻量简洁
  Gentoo:极致性能,不提供传统意义的安装程序
  LFS:Linux From scratch 自制Linux
  Android:kernel+busybox(工具集)+java虚拟机

软件程序版本号
  软件程序版本:major.minor.release (主版本号.次版本号.发型号或者修正号)
  Linux内核版本:0.99/2.4/2.6/3.0/4.0

Linux系统发行版版本号:
  如:RHEL:5.x、6.x、7.x

开源open source
  软件的源代码提供给所有人,可以自由分发软件和源代码、能够修改和创建衍生作品、作者的代码完善

开源协定:
    GPL协定:LGPL,GPLv2,GPLv3
    BSD协定:
    Apache协定:

软件分类:商业,共享,自由
  Community:社区版,遵循开源协定
  Enterprise:商业版

3、Linux哲学思想
  一切都是一个文件(包括硬件)
 小型单一用途的程序
 连接组合各小程序共同完成复杂的任务
 避免令人困惑的用户界面
 配置数据存储在文本中

4、Linux获取发行版国内镜像站点
  https://opsx.alibaba.com/mirror
  https://mirrors.163.com/

Linux基础入门
1、操作系统与硬件
  无论Linux、OSX、Windows操作系统,他们都是有以下部分组成(分层结构):
    最底层:硬件
    硬件之上:将硬件接口抽象成系统调用(kernel)
    系统调用上:将系统调用封装成更高级的功能就是库
    库之上:应用程序

程序的运行有两种方式
    开机自动运行
    用户通过交互式接口登录或者连接系统上去,来手动运行程序
  用户可以通过交互式接口对系统及程序进行操作、配置管理

扩展知识:
Linux发行版本
  发行版    衍生发行版       包管理格式
  Redhat   CentOS、Fedora   RPM
  SUSE    OpenSUSE         RPM
  Debian   Ubuntu、Mint     Dpkg
  Gentoo
  LFS(Linux From Scratch)从零开始构建一个Linux系统

为什么32位CPU只能支持4G的内存:
  因为CPU在读取内存时,通过地址总线去寻址,才能找到相应的数据在内存中的位置,32位的CPU与内存相连的32根针脚(2^32种变化),能表示的地址是2^32个,换算出来是4G的地址数;地址总线和数据总线是复用的,CPU一次能处理位长为32

CPU的指令集:
 指的CPU能支持什么样的功能,一个功能就是一个指令,所有的指令就是指令集
 我们要解决的问题叫问题空间,芯片能完成的操作叫解空间

操作系统:
 在原始的计算机CPU一次只能执行一个任务(执行的是批处理的流程,处理完一个任务在处理下一个任务);操作系统的目的集中分配硬件资源,达到处理多任务的目的,上层软件只跟操作系统交互,不会直接操作硬件,操作系统就需要提供能使用硬件功能的接口给上层软件调用;

CPU指令运行级别:
 X86 CPU指令级别分为4个级别(4个环),最里面的环(环0)为特权指令(特权环),只有操作系统能运行环0中的指令,上层软件只能运行最外层的环3(用户指令),有些软件要用特权指令,就需要通过操作系统来访问(环1和环2没用)

操作系统的模式空间:
 用户模式:只能执行环3中的指令
 内核模式:操作系统才能执行环0中的指令

系统调用:
 任何只有内核才能执行的操作,通过接口的形式表现出来,这些接口称之为系统调用;凡是一个用户模式要操作内核模式中的指令时,就通过内核提供的系统调用来操作

库:
 把系统调用封装成更复杂的程序,以供别人使用,称之为库(又称重复造轮子);把系统调用封装成更高级的功能
 API:Application Progrming Interface(应用编程接口)开发以后编译之前
 ABI:Application Binary Interface(应用二进制接口)编译以后运行之前

硬件控制器:
 北桥上连接的是高速总线,南桥上连接的是低速总线
 每个总线都有控制器,将接入的IO设备的电器信号转换为主板上的数字信号,这样CPU才能控制;每个总线控制器起来后都会向桥设备注册IO端口

适配器:
 独立网卡或独立显卡也叫网卡适配器或显卡适配器,就是为了电器信号和数字信号转换

进程(process):
 进程是程序的实例,是程序的子集;一个程序可以打开多个进程
 单核CPU在处理进程的时候一次只能处理一个(CPU是分时间片的),在没处理完时,其它高优先级进程要处理,就会保存没处理完的状态(叫保存现场),在恢复处理叫还原现场;进程之间的相互切换叫进程切换(上下文切换)

2、终端(terminal)
  物理终端:是直接在主机之上,是本机自带的,直接连入的,也称之为物理控制台(console)
  表示:/dev/console
  只有在特殊情况下才会用到,如:单用户模式

虚拟终端:Linux提供给我们6个虚拟终端,这些虚拟终端是附加在物理终端之上的,用软件方式虚拟实现的终端,CentOS默认启用6个虚拟终端,可以通过快捷键来切换。
  表示:/dev/tty# [1,6]
  切换方式:Ctrl+Alt+F[1-6]

图形终端:也是附加在物理终端之上,用软件方式虚拟实现的终端,但额外会提供桌面环境,也是虚拟终端的一种
  切换方式:
    CentOS 6 :Ctrl+Ait+F7
    CentOS 7:在哪个虚拟终端启动,即位于哪个虚拟终端
    命令切换方式:~]# chvt 1...
  启动GUI:在某一虚拟终端接口运行命令:startx &

  伪终端(模拟终端):图形界面下打开的命令行接口,还有基于ssh协议和telent协议等远程打开的命令行界面。
    表示:/dev/pts/#

查看当前的终端设备命令:
  [root@CentOS6 ~]#tty
  /dev/pts/0
注意:
  在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互;
  终端实际上是一个设备,一个设备要想与系统进行交互,必须有交互接口,当我们开启一个终端时,系统会自动的在终端上运行(附加)一个交互式shell程序

扩展知识:
  物理终端: /dev/console
 在Linux 系统中,直接接入计算机显示器通常被称为物理终端,也叫做控制台终端(Console)。物理终端只有在系统还没起来之前会显示启动加载信息,一但系统起来显示登陆界面就显示的是虚拟终端/dev/tty1,所以虚拟终端是附加在物理终端之上的;
 并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Ctrl+Alt+[F1—F6]组合键时,我们就可以切换到tty2、 tty3等上面去。tty1—tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向 /dev/tty0进行写操作

虚拟终端:/dev/tty[1-6]
 虚拟终端附加在物理终端之上的,是以软件方式虚拟实现的终端。系统开机后会启动6个虚拟终端,默认使用tty1登录,可以使用快捷键 Ctrl+Alt+F[1-6]切换虚拟终端;或者通过chvt命令切换chvt [1-6]。  

图形终端:/dev/tty0
 图形终端也是以软件方式虚拟实现的终端,但会额外提供桌面环境,使用快捷键 Ctrl+Alt+F7可以切换图形终端tty7。图形终端也是虚拟终端的一种。

模拟终端:/dev/pty/#  (/dev/pts/#)
 模拟终端是纯粹的软件方式实现,而且不会附加在本地物理终端上。模拟终端是附加在图形终端或其他远程终端之上,用软件方式模拟出来的。例如,在图形界面下打开的命令行工具,在windows上使用的ssh远程连接工具打开终端等。这种远程连接用软件模拟的终端,叫做模拟终端或叫伪终端(Pseudo Terminal)。

串行端口终端:/dev/ttyS[1-6]
 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)等,设备号分别是(4,0)、(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。

3、交互式程序的接口
  交互式程序有两类:GUI和CLI
    GUI:图形化界面,是基于X协议实现的窗口管理器
    Linux桌面系统有:
      GNOME(C程序开发,gtk开发库)
      KDE (C++程序开发,qt开发库)
      XFCE (轻量级桌面)

CLI:命令行界面,对应的叫做shell程序,用户要想与系统交互,必须通过shell,不同的程序员开发的程序不一样但是都可以实现同样的功能(就是交互式功能),所以说shell程序也有很多种,如:Sh,csh,Ksh,Bash,zsh;Shell又被称为Linux的命令解释器;
  获取当前环境使用的shell是那种shell
  # echo $SHELL
  显示当前环境所使用的所有的shell
  # cat /etc/shells

演示:
  # 获取当前环境使用的shell
  [root@CentOS6 ~]# echo $SHELL
  /bin/bash

#显示所有的shell
  [root@CentOS6 ~]# cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  /bin/dash
  /bin/tcsh
  /bin/csh

Linux 基础入门一的更多相关文章

  1. Linux 基础入门(新版)”实验报告一~十二

    实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...

  2. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

  3. Linux 基础入门 第二周9.21~9.27

    一.学习内容 本周主要学习内容主要贴合: 在进行<深入理解计算机系统>这门课的实验中没有遇到什么大问题,学习内容与上周实验<linux基础入门>有相似之处.本实验中的内容比较贴 ...

  4. Linux 基础入门----推荐课程

    Linux 基础入门课程:https://www.shiyanlou.com/courses/1 很好的一门Linux基础课,精炼.简洁!推荐! 课程内容: 第1节 Linux 系统简介 https: ...

  5. Linux基础入门教程

    Linux基础入门教程 --------- Linux学习路径 Linux学习者,常常不知道自己改怎么学习linux:Linux初级,也就是入门linux前提是需要有一些计算机硬件相关的知识或是有一下 ...

  6. 在学习linux基础入门时的一些问题总结(1)

    本周在实验楼完成了<linux基础入门>的21个实验,虽然之前已经学习过linux的相关课程,对linux下的命令也有一些了解和实践,但完成这21个实验以及35个练习题仍然遇到了许多的问题 ...

  7. 腾讯云-Linux 基础入门

    Linux 基础入门 目录操作 任务时间:5min ~ 10min 创建目录 使用 mkdir 命令创建目录 mkdir $HOME/testFolder # $HOME 当前用户的家目录  root ...

  8. Linux基础入门之网络属性配置

    Linux基础入门之网络属性配置 摘要 Linux网络属性配置,最根本的就是ip和子网掩码(netmask),子网掩码是用来让本地主机来判断通信目标是否是本地网络内主机的,从而采取不同的通信机制. L ...

  9. Linux基础入门 - 3

    第四节 Linux 目录结构及文件基本操作 4-1.Linux目录结构 Linux 的目录与 Windows 的目录的实现机制是完全不同的.一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关 ...

  10. Linux基础入门 - 2

    第三节 用户及文件权限管理 3-1.Linux用户管理 Linux 是一个可以实现多用户登陆的操作系统,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是 ...

随机推荐

  1. currentThread()方法返回代码段正在被哪个线程调用

    currentThread()方法返回代码段正在被哪个线程调用 package com.stono.thread2.page16; public class MyThread extends Thre ...

  2. 日积(Running)月累(ZSSURE):Task之Cancel、OpenAccess之Delete及fo-dicom之DeepCopy、

    题记: 最近看了一篇关于架构方面的良心长文你的架构是怎样一步步腐化的?,文中字字句句道出了诸多从业者.初创企业,以及BAT都会遇到的问题,细细品读后认为工作生活中的诸多情况皆如此,都会有一个体量由小到 ...

  3. vim设置为indent折叠以后,每次打开文件时代码处于折叠状态,能改变吗?

    vim设置为indent折叠以后,每次打开文件时代码处于折叠状态.即使这次编辑的时候把折叠展开,保存关闭文件,重新打开,所有的代码都又折叠起来了. 请问有没有默认不折叠的方法? 是否有可以一次展开所有 ...

  4. Node.js:模块系统

    ylbtech-Node.js:模块系统 1.返回顶部 1. Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的 ...

  5. ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware

    转自:ServletContextAware.ServletRequestAware.ServletResponseAware.SessionAware Struts 2提供了Aware接口.Awar ...

  6. java8新特性系列:[1]让你的eclipse支持java8

    package com.anhui.jdk8; /** * 针对eclipse是否支持java8小测试 * MainClass * @author zhongzh * */ public class ...

  7. exchange&nbsp;2010-备份还原

    操作系统:Windows Server 2008R2 \ Exchange2010 测试 1.使用Administraotr用户进行查看己有邮件,如下图: 2.备份Exchange2010整个数据库, ...

  8. HBase学习----windows10下使用eclipse搭建HBase的开发环境

    以下是我搭建HBase开发环境的一些心得(windows10) 0.安装JDK和eclipse和一个可用的HBase. 这步是最基础的,在此就不赘述了 1.创建一个java项目: 基础问题,不赘述. ...

  9. C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  10. 前端学习笔记-HTML(一)