Linux

5种I/O方式

阻塞的两个阶段:
内核准备数据(将数据从磁盘拷贝到内核缓冲区),内核拷贝数据到进程(数据从内核缓存区拷贝到进程缓存区)。
1. 阻塞I/O:
线程发出请求之后,如果内核没有准备好数据,线程就会交出CPU,并处于阻塞状态,直到内核返回数据。
2. 非阻塞I/O:
线程发出请求后会立刻对内核的返回结果就行判断,如果返回error说明内核没有准备好数据,线程会重新发起请求,直到获取到数据。
也就是再内核准备数据的阶段不断询问内核准备好了没有。
3. I/O多路复用:
通过一个线程轮询多个socket的状态,只有当socket真正有读写的需求时才会占用I/O资源。
即专门开辟一个线程(select,poll,epoll)来为多个socket等待内核准备数据,一旦有任何一个socket的数据准备完成,select就会返回。优点是能够处理更多的连接。
4. 信号驱动I/O:
当线程发起一个I/O请求时,会给socket注册一个信号函数,然后线程会继续执行。
当内核准备好数据后,会发送一个信号给线程,线程接收到信号后开始执行信号函数来执行实际的I/O操作。
5.异步I/O:
当线程发起一个I/O请求后会继续执行,内核接收到请求后立即返回一个信号表示请求发起成功。
接着内核会进行数据准备和将数据拷贝拷贝到线程的工作,当这些工作都完成之后,内核会再发送一个信号给线程,线程直接调用数据,没有任何阻塞过程。

Buffer和Cache

Buffer:
buffer的作用是减少磁盘IO写入次数。相当于开辟一块内存,将多个长度较短的写入操作放到其中,统一进行一次磁盘IO读取.所以通常叫write-buffer。
Cache:
Cache的作用是减少磁盘IO读取操作。相当于开辟一块内存,保存着用户常用的一些变量。用户再次使用时不用访问磁盘,˙只需要访问内存,提高效率。所以通常叫read-cache。
cache需要提供随机读写的功能。

常用命令

常用命令:top,netstat,ifconfig,ps,tcpdump,curl,echo,ping,iostat,df,free(查看内存使用情况),grep,find,cat,less,cd,cp,ls,mkdir,touch,
常用命令:用户控制、权限控制、进程控制、系统状态查询之类的
查看端口号:netstat
查看进程:pstree
关闭进程:pkill
实时查看cpu和内存状态:top
uptime:top命令的第一行,查看服务器的运行时间以及平均负载(最近1分钟,5分钟,15分钟)
who:当前用户在线信息
last:近期重要操作
at:一次性任务计划。 atq:查看 atrn:删除 at 时间 >>命令 >>ctrl+d
crontab:周期性定时任务 -e 编辑 -l 查看 -r 删除 分 时 日 月 星期
Linux状态分析:CPU(top)、内存(top和free,注意buffer和cache区别)、磁盘(fdisk和df)、IO(iostat)等
电脑运行慢的主要原因:内存
top命令可以查看cpu和内存的使用情况
TOP:
VIRT:虚拟内存大小 RES:物理内存大小

常用文件夹

dev:
系统的硬件管文件夹,其中的每个文件对应的都是一个硬件。

进程间通信方式

  1. 管道:半双工,需要有亲缘关系
  2. 有名管道:半双工,不需要亲缘关系
  3. 信号量:一个计数器,用来控制多个进程对共享资源的访问
  4. 信号:用于通知接收进程某个事件已经发生,例如子进程在结束时会发送一个信号给父进程,避免成为僵尸进程。
  5. 消息队列:消息队列就是生产者将信息打上标签写入到消息队列中,订阅消息队列的消费者从消息队列中取出信息,如果标签匹配则执行。
    优点:通过异步处理提高性能,降低系统耦合性
  6. 共享内存
  7. 套接字socket:可以用于不同进程之间的通讯。

虚拟内存

虚拟内存的概念:
Linux中,为了更好的解决各个进程的内存分配问题,提出了虚拟内存的概念。
虚拟内存从本质上说就是一个映射表,表中记录着每个虚拟内存地址到物理内存地址的映射。在32位操作系统中,每个映射需要8个字节(32位虚拟内存->32位物理内存)。
实际使用时,系统会以4K内存为一页,建立映射,这样4G内存只需要8M的映射表(4M虚拟内存地址,4M物理内存地址)。
CPU中有着专门的内存管理单元MMU(Memory Management Unit)来进行虚拟内存到物理内存之间的映射。
功能:
解决多个进程访问内存冲突的问题。
有益于进程内存管理,在进程眼中获取到总是连续的内存。
便于进行数据共享
在物理内存不够时,可以将暂时不用的内存复制到SWAP区,在使用结束后再复制回来。
常见问题:
32位系统和64位系统相关:
对于32位系统,相当于寻址地址最大为32位,对应的寻址空间最大为4G。64位系统的寻址地址为64位,寻址空间最大为256G。
利用32位的虚拟内存对64位的物理内存寻址是可行的,不过有好多内存访问不到。但是用64位虚拟内存映射到32位物理内存是不可行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值