操作系统 Linux系统
Linux操作系统
预备知识(Operating System):
1、GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台。
2、操作系统:管理计算机硬件和软件资源的程序,而且操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
3、操作系统基础知识:一、四个特性:并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件);二、共享:系统中的资源可以被内存中多个并发执行的进线程共同使用;三、虚拟:通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个;四、异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进。
4、进程和线层:进层状态和多线层的状态(就绪状态,执行状态,阻塞状态);队列(就绪队列和阻塞队列);
5、进程和线层:
一、进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
二、进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
三、线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。多线层共用资源,包括代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储),但是每个线程拥有自己的栈段, 寄存器的内容,栈段又叫运行时段,用来存放所有局部变量和临时变量。
四、线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
6、同步和异步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作。
注:1、父和子进程使用进程间通信机制(https://www.cnblogs.com/xdyixia/p/9257668.html),同一进程的线程通过读取和写入数据到进程变量来通信。线程之间的通信更方便。
2、进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题;同步的解决方案:管程,信号量。
7、IO模型:
同步IO、synchronous IO做”IO operation”的时候会将process阻塞,所以blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO。非阻塞IOIO在执行recvfrom这个system call的时候,如果kernel的数据没有准备好,这时候不会block进程。但是,当kernel中数据准备好的时候,recvfrom会将数据从kernel拷贝到用户内存中,这个时候process是被block了。
异步IO、用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,所以不会对用户进程产生任何block。kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal。
阻塞IO、在linux中,默认情况下所有的socket都是blocking,blocking IO的特点就是在IO执行的两个阶段都被block。recvfrom这个系统调用,kernel(实时操作系统)准备数据。数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),kernel要等待完整的数据。用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。
非阻塞IO:非阻塞将大的整片时间的阻塞分成N多的小的阻塞, 所以进程不断地有机会 ‘被’ CPU光顾”。即每次recvform系统调用(阻塞IO)之间,cpu的权限还在进程手中,这段时间是可以做其他事情的。
IO多路复用:select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO,基本原理就是select/epoll这个function会不断的轮询所负责的所有socket(kernel会“监视”所有select负责的socket,所以优势在于IO多路复用可以同时处理多个connection),当某个socket有数据准备好了,就通知用户进程调用read,将数据从kernel拷贝到用户进程。
8、虚拟地址:进程创建加载的时候,自身感知获得了一个连续的内存地址空间,然而实际上内核之分配了一个逻辑上的虚拟内存空间,并且对虚拟内存和磁盘通过mmap做映射关系,对虚拟内存和物理内存的映射关系;等到程序真正运行的时候,需要某些数据,并不在虚拟内存中,才会触发缺页异常,进行数据拷贝。
2、Linux系统的优点:
Linux操作系统:
一、Linux目录系统:
1、/和~:
/是根目录,Linux系统只有一个/目录;~是家目录,每个用户都有一个家目录。如果是root用户(根用户、超级用户),~表示的是:/root;如果是普通用户a,~表示的是:/home/a
2、文件基本属性:
一、在Linux中第一个字符代表这个文件是目录、文件或链接文件等。
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
二、文件权限,前10个字符表示文件类型和权限,读r(4),写w(2),执行x(1),没有权限-。(注:可用三位二进制数表示权限)
3、绝对路径和相对路径:
绝对路径:路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录;相对路径:不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man
二、Linux操作系统常用命令操作:
1、文件操作:ls/file、cp、mv、ln、rm、tar、chmod/chowm/charp/touch
2、目录操作:mkdir、rmdir、cd、pwd
3、用户切换:su、sudo、login;passwd;exit/reboot、init0/shutdown、halt/poweroff
4、获取帮助:[命令]+:-h、-?、--help;man、info+[命令]
三、Linux操作系统,shell编程:
1、变量、流、管道;
变量是一种临时记录字符串的方式,export(变量的赋值);$(提取变量的值)export name=$(pwd)/tar.tar
流是打开文件的一种形式,cat、echo、sort、uniq、head、tail、wc;>(文件内容删除)、>>(在文件的尾部增加输出的内容)格式:命令>(>>) 文件,如 cat greptest >liutest
管道(|)是一种进程的通信方式,将前一个命令的输出发送给后一个命令。grep "grep" greptest | tail -n 3
2、进程操作:
进程查看,ps
进程控制,kill;语法:kill { [{ -信号 | -s 信号}] 进程号 | -l [信号] } -s 信号 或者 -信号 :发送信号到指定进程;-l 信号:将信号数值翻译成信号的名称
进程切换,bg和fg
3、网络操作
网络配置:ifconfig
ping:ping [参数] 目标地址
ARP:将IP数据报转换为以太网的帧,并发送给临近的网络接口
FTP:FTP服务器主要提供远程文件下载服务。
4、系统变量(表示特殊含义的系统变量):$+n/#/0/?/*/@/$/!
5、shell编程设计:
变量、条件测试>>文件状态测试、逻辑操作(-a、-o、!)、字符串测试(-z、n;=、!=、<、>)、数值测试(-eq、-ne;(-lt、-le)、(-gt、-ge))
流程控制语句:if;case(字符串str所匹配的情况,执行相应的程序分支);while、until;for
常用命令:
read;
select;
大括号{ }(将一个非整体的字符串强制解释成一个整体如:[$1 = '-n'] && { echo hello" ls });
"(单引号),取消所有的转义符号、通配符和分隔符、""(双引号),取消通配符和分隔符的转义,但是对于变量依然进行转义。'12 $a'和"12 $a"中的a=12两者表达的意思不同!
funname(){...}函数
四、Linux操作系统 vi/vim编辑器:
1、三种操作模式:命令模式、底行模式、文本输入模式
默认模式是命令模式,在命令模式下按:模式切换为底行模式;按i、a、o等,命令模式切换为文本输入模式;两种模式按ESC可以切换为命令模式。
底行模式用于处理带有参数的命令。
2、可视模式:在命令模式下按v,模式切换为可视模式,按v退出可视模式。
3、取代模式(Replace mode-按键r和R):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止。
4、vi键盘图
五、Linux操作系统 linux yum 命令:
1、yum 语法:yum [options] [command] [package ...]
2、yum常用命令:
1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install <package_name>
4.仅更新指定的软件命令:yum update <package_name>
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove <package_name>
7.查找软件包 命令:yum search <keyword>
8.清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers