Linux
文章平均质量分 77
MISSyingying
如果有一天我变得很有钱..............
展开
-
虚拟存储器
如果没有虚拟存储器,可能会带来这些问题: 1.所有的进程都共享CPU和主存资源。所以当进程太多,太大,而导致内存无法容纳时,就无法运行该进程。 2.存储器很容易被破坏,当一个程序不小心写了另外一个进程使用的存储器时,那么进程可能就会以一种奇怪的方式而终止。 为了更加有效的管理存储器且少出错,就出现了虚拟存储器。虚拟存储器为每个进程都提供了一个大的,一致的,私有的地址空间。 虚拟存储器:将内...原创 2018-04-30 17:57:30 · 444 阅读 · 0 评论 -
五种IO模型
IO:可以理解为将数据从外设到内存,从内存到外设的转移. IO通常分为两步:①等待数据准备好(可能大部分的时间都是在等待数据准备就绪的过程)②将数据进行拷贝. 所以提升IO效率:尽量减少等待数据的时间. 下面就是常见的5中IO模型. - 阻塞IO:在内核数据准备好之前,其系统调用函数会一直等待.(注意:所有的套接字,默认都是阻塞方式)阻塞IO中,调用者在等,也会亲自去调用.(同步IO) ...原创 2018-07-21 21:48:52 · 282 阅读 · 0 评论 -
epoll的工作原理和使用场景
对比epoll和select,就会发现select的缺点恰恰都是epoll的优点.下面进行epoll的学习:epoll的相关系统调用的函数:1.创建一个epoll句柄(即是一个文件)int epoll_create(int size);返回值:epoll_create的返回值是一个文件描述符.参数:在现在的使用中,size没有什么意义,可以随便填写2.epoll事件的添加...原创 2018-07-24 21:59:16 · 3390 阅读 · 0 评论 -
非阻塞IO(将文件描述符设置为非阻塞)
我们知道,所有的套接字都默认是阻塞IO.那么怎么将其改为非阻塞呢? 有一个函数fcntl,就可以将其设置为非阻塞.#include <fcntl.h>int fcntl(int fd,int cmd,...);参数cmd一般有一下几种方式: - 复制一个现有的文件描述符(cmd = F_DUPFD) - 获得/设置文件描述符标记(cmd = FGGETFD/FSE...原创 2018-07-24 11:48:56 · 2406 阅读 · 2 评论 -
解决频繁I/O之select以及select+TCP的服务器代码实现
select的特点:可监视的文件描述符的个数有上限,取决于sizeof(fd_set),每一个bit表示一个文件描述符. select的缺点(就是epoll的优点): 1. 每次调用select,都要手动设置fd_set的集合,使用很比方便. 2.每次调用select,都要把fd_set集合(3个集合,读,写,异常)从用户态拷贝到内核态,那么如果频繁的调用s...原创 2018-07-25 21:59:10 · 599 阅读 · 0 评论 -
传输层协议之TCP
TCP:传输控制协议 首先我们来看看TCP的协议格式: 源/目的端口号表示数据从哪个进程来去哪个进程.32位序号/32位确认序号:在数据传送时标识数据的发送端已发送的和接收端确认消息收到后确认的对应的数据.4位TCP报头,在图中已经给出解释.6个标志位 ①URG:紧急指针是否有效 ②ACK:确认号是否有效 ③PSH:提示应用程序接收端立刻从TCP缓冲区把数据读走. ④RST...原创 2018-07-04 21:59:05 · 406 阅读 · 0 评论 -
传输层协议之UDP
端口号端口号的范围划分: 范围 0~1023 知名端口号:一些著名的协议,它们的端口号都是固定的. 1024~65535 普通端口号:操作系统动态分配的端口号.例如:客户端程序的端口号,就是由操作系统从这个范围分配的常见的著名端口号:ssh服务器:22号端口ftp服务器:21号端口telnet服务器:23号端口http服务器:8...原创 2018-07-01 21:59:17 · 763 阅读 · 0 评论 -
应用层HTTP协议----超文本传输协议
HTTP是一个属于应用层的协议,它是基于TCP实现的服务器/客户端的模式,客户端发送请求,服务请响应请求.认识URLURL:网址. 例如:下面这个图中的网址其实是一个标准的网址 而我们现在的看到的网址基本都是这样的:https://www.baidu.com/s?wd=%E5%A4%A7%E8%92%9C%E7%9A%84%E8%8B%B1%E6%96%87&rsv...原创 2018-07-01 15:53:59 · 817 阅读 · 0 评论 -
线程的同步与互斥,消费者生产者,POSIX信号量,读者写者
mutex(互斥量)在大部分情况下,线程使用的数据都是局部变量,那么变量的地址空间在线程栈的空间内,这样的变量属于单一线程,而其它的线程是无法访问的.那么,线程间通信就是要访问相同的资源,从而完成线程间的交互. 可是,很多个线程并发的操作某个资源时,就会带来一些问题: 例如:下面是一个简单的购票系统.#include <stdio.h>#include<stdl...原创 2018-06-30 17:35:48 · 485 阅读 · 0 评论 -
进程间关系和守护进程
进程组,作业,会话进程组:是一个或者多个进程的集合。每个进程组有一个唯一的ID。每个进程组都有一个进程组组长。区分进程组组长:组长进程的ID与进程组ID相同。若kill了进程组长,并且如果该进程组中还有其它进程,那么该进程组就依然存在。 查看进程组的指令:ps axj | grep 可执行文件 例: fork(); while(1) {} 查看结果:将进程变...原创 2018-06-25 13:45:50 · 201 阅读 · 0 评论 -
Linux信号的产生,处理
信号的概念: 在日常的学习中,当一个进程在执行时,按下crtl-C时就会产生一个硬件中断.(这也是一种信号)整个过程如下: 信号的产生:通过键盘 Core Dump: Core Dump其实是指一个文件,当一个进程因为异常终止时,可以将进程的内存数据全部保存到磁盘中,文件名通常就是core,所以这就是Core Dump.并且可以通过调试这个文件来查看我们的错误原因,这种方式叫...原创 2018-06-08 21:59:01 · 700 阅读 · 0 评论 -
Linux之进程间通信(一)---管道
进程是一个独立的资源分配单位,每个进程的资源都是独立的,有独立的用户地址空间,当有多个进程同时存在时,当有一个进程突然出现异常时,其它的进程是不受影响的.那么,有时候就需要不同进程的信息进行交换或传递才可以工作.所以就出现了进程间通信.进程间通信的目的:数据传输:一个进程需要将它的数据发送给另一个进程.资源共享:多个进程之间共享同样的资源(比如:共享同一段内存).通知事件:一个进...原创 2018-06-12 00:08:12 · 358 阅读 · 2 评论 -
文件的读写使用,重定向,文件描述符
调用系统函数进行文件的读写 打开文件: int open(const char* pathname,int flags); int open(const char* pathname,int flags,mode_t mode); //mode:当打开的文件不存在时,就要在打开文件的同时并创建文件,那么就需要设定文件的权限. flags:打开文件的选项:若同时需要...原创 2018-05-18 19:49:12 · 708 阅读 · 0 评论 -
进程创建,进程等待,进程终止,进程的程序替换
进程创建fork()函数: 在原来的博客中已经写过一次进程创建了,在这儿就详细讲解一下进程是怎么创建的. 已经知道,在Linux中,创建进程可以通过调用fork函数来实现,那么当我们在调用fork函数时,操作系统内部到底是怎样实现的呢?fork()函数在内部通过已经存在的进程创建出一个新进程,而新进程就是子进程.#include&amp;amp;lt;unistd.h&amp;amp;gt;pid_t for...原创 2018-05-05 16:55:45 · 311 阅读 · 0 评论 -
1.进程2.僵尸进程3.孤儿进程4.进程的优先级
冯·诺依曼体系结构 特点:在该体系结构中,外设不能直接与cpu连接,而是要先通过与存储器,存储器再与cpu通信。下面我们模拟一下两个人通过软件发送消息的过程: 操作系统(OS)例如,在学校中,校长就是我们的管理者,比如校长在分发我们学生的奖学金时,首先通过学生的成绩来评选优秀的学生,而执行这件事的是辅导员,校长就可以通过辅导员来管理学生的奖学金。 例比到操作系统,操作系统在管...原创 2018-04-20 21:54:37 · 267 阅读 · 0 评论