Linux
Monster7559
这个作者很懒,什么都没留下…
展开
-
网络编程整理一基础知识
一:网络层次的划分1.七层因特网协议栈模型:从上到下依次为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层2.五层因特网协议栈模型:(后面为每层所包含的部分重要协议)从上到下依次为:应用层(HTTP)、传输层(TCP/UDP)、网络层(IP/ICMP)、数据链路层(ARP/RARP)、物理层二:网络字节序列1.大端:低地址存高字节2.小端:高地址存高字节3...原创 2019-01-11 10:14:02 · 279 阅读 · 0 评论 -
进程调度(一)
一:多任务多任务操作系统就是能同时并发的交互执行多个进程的操作系统 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行 多任务系统分类:(1)抢占式多任务(2)非抢占式多任务 Linux提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候通知一个进程的运行,以便其他进程能够得到执行的机会。这个强制的挂起动作叫做抢占。进程被抢占之前能够运行的时间是预先设置好的,叫进程...原创 2019-03-05 17:28:36 · 558 阅读 · 0 评论 -
进程调度(二CFS调度算法)
1.Linux调度的实现CFS调度算法的实现由四部分组成:(1)时间记账:所有的调度器都必须对进程运行时间做记账 CFS使用调度器实体机结构来追踪进程运行记账(定义在sched。好的struct sched_entity)调度器实体结构作为一个名为se的成员变量,嵌入在进程描述符struct task_struct内。 CFS使用vruntime变量来记录一个程序到底运行了多长时间...原创 2019-03-05 17:28:20 · 553 阅读 · 0 评论 -
进程调度(三上下文切换)
1.抢占和上下文切换上下文切换(也就是切换进程),在schedul()函数中通过context_switch()函数处理进行两个基本工作。context_switch()函数就是执行下一个进程,并返回指向前一个进程的进程结构的指针。context_switch()中的两个主要函数一个是切换虚拟内存映射,另外一个是切换进程/线程的结构。 第一个是由函数switch_mm()完成,该函数使用了许...原创 2019-03-05 19:31:17 · 1578 阅读 · 0 评论 -
进程地址空间
一:进程地址空间1.内核使用内存描述符结构体表示进程的地址空间,该结构体包含了和进程地址空间有关的全部信息。内存描述符由mm_struct()结构体表示。在struct task_struct()中有一个struct mm_struct()*的指针指向该结构体。2.Mm_struct()结构体中包括的域有(1)struct vm_area_struct *mmap指向一个链表,虚拟内存...原创 2019-03-05 19:31:47 · 169 阅读 · 0 评论 -
关于信号
1.发送信号:kill函数/命令kill(pid,信号):pid>0 发送给指定进程信号 pid=0发送给本进程组内的其他进程信号pid=-1 信号发送给处init进程外所有的进程,但是发送者需要拥有对所有目标进程发送信号的权限Pid<-1信号发送给组id为-pid的进程组中的所有成员信号的值一般都大于0若信号取值为0 kill不发送任何信号 但是sig=0可以用来检测...原创 2019-08-02 15:11:41 · 201 阅读 · 0 评论 -
定时器
1.定时器的作用:服务器程序管理很多的定时事件,有效的组织这些定时事件,使他们可以在预期的时间点被触发且不影响服务器的主要逻辑,有很重要作用。因此将每个定时事件封装成定时器,使用某种数据结构像链表,排序链表之类的东西将所有定时器连接起来,以实现对定时事件的统一管理。2.Linux提供三种定时方法:①socket选项SO_RCVTIMEO和SO_SNDTIMEO一般用setsockopt...原创 2019-08-02 15:13:36 · 426 阅读 · 0 评论 -
关于Select
一:注意1.socket上接收到普通数据和外带数据都将使select返回但是socket处于的是不同的状态。前者处于可读状态,后者处于异常状态。对于接受到普通数据时:int connfd=accept(listenfd,(struct sockaddr*)&client_address,&client_addrlength);If(FD_ISSET(connfd,&am...原创 2019-07-26 14:19:51 · 243 阅读 · 0 评论 -
关于poll与epoll
一:poll1.poll与select相同,都是在指定时间内轮询一定数量的文件描述符,测试是否有就绪事件2.poll的参数int (struct pollfd* fds,nfds_t nfds,int timeout)fds是一个pollfd结构体类型的数组pollfd类型三个参数:fd表示关注的文件描述符;short events是告诉poll监听fd上的那些事件,是一系列事...原创 2019-07-26 14:21:52 · 1351 阅读 · 0 评论 -
三种IO复用的比较
1.select没有将文件描述符和事件绑定,,仅仅是一个文件描述符的集合,因此select分为三种不同类型参数分别传入不同的事件。这一方面使得select不能处理更多类型的事件,另一方面由于fd_set集合的在线修改,应用程序下次调用select前不得不重置这三个fd_set集合。poll则把文件描述符和事件都定义在一个结构体pollfd中,任何事件都被统一处理并且内核每次修改的是revent...原创 2019-07-26 14:22:28 · 349 阅读 · 0 评论 -
fork注意事项
1.Linux中进程的创建方式(系统调用: fork、clone、vfork)(1)fork()(不带参数)和clone()(带参数): 这两者的区别在于fork()是全部复制而clone()则可以将资源有选择的复制给子进程,而没有复制的数据结构则是通过指针的复制让子进程共享,极端情况下一个进程可以clone()出一个线程。所以系统调用fork()无参数,而clone()则带有参数(2)v...原创 2019-03-05 17:25:25 · 380 阅读 · 0 评论 -
fork(四源码剖析)
一:基础了解1.fork,vfork,_clone都是通过系统调用clone来实现,然后再用clone去调用do_fork2.内核把进程存放在叫做任务队列的双向循环链表中。链表中的每一项都是类型为task_struct,称为进程描述符的结构。进程描述符包含一个具体进程的所有信息。3.进程描述符的存放:内核通过一个唯一的进程标识值或PID来标识每个进程,PID是一个数,表示为pid_t隐...原创 2019-01-14 21:11:55 · 503 阅读 · 1 评论 -
系统调用与库函数认识总结
1.定义:(1)系统调用:是指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。(2)库函数:是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)提供功能性调用。无需关心平...原创 2019-01-03 17:49:19 · 654 阅读 · 0 评论 -
从内核态切换到用户态
1.用户态切换到内核态有三种方式(1)系统调用这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如0x80中断。(2) 异常当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发...原创 2019-01-05 22:06:46 · 4954 阅读 · 2 评论 -
fork学习(一基础学习)
1.fork():复制创建进程,出错返回-1,调用一次返回两次,在父进程中返回子进程的pid,在子进程中返回0.2.子进程会继承父进程中的数据和程序计数器,且从fork()之后开始执行,fork()之后父子进程就是两个独立的进程,谁先运行由操作系统决定。3.两个例子:int main(){ int i=0; for(;i<2;i++) { ...原创 2019-01-14 21:11:25 · 295 阅读 · 0 评论 -
fork学习(二僵死进程)
1.僵死进程:(1)PCB存在,进程主体释放。子进程结束,父进程未获取子进程的退出码,从而子进程不得不保存退出码,所以整个PCB也无法释放(子进程不知道父进程什么时候使用退出码)(2)僵死进程处理:是可以将父进程关闭掉可以代替的将僵尸进程处理掉,(孤儿进程:没有父进程的进程,孤儿进程会被init接管,所以一旦出现僵死进程,结束父进程,会变成孤儿进程,init(系统进程)会处理掉)(3)...原创 2019-01-14 21:11:34 · 168 阅读 · 0 评论 -
网络编程二基础知识
1.套接字:数据链路层、网络层、传输层协议是在内核中实现,因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。目前主要实现这组系统调用的API时socket。套接字具备从网络中发送收取数据的功能。2.3.传输层的协议主要有两个:TCP协议和UDP协议。TCP协议是面向连接的、可靠的、流式服务。而UDP协议是无连接不可靠的数据报服务。4.TCP和UCD所使用的套...原创 2019-02-28 15:32:48 · 237 阅读 · 0 评论 -
网络编程三TC三次握手和四次挥手
1.TCP数据被封装在一个IP数据包中,该IP数据包包括IP首部、TCP首部、TCP数据三部分。而在TCP首部中包含了各种信息。此次主要关注其中的标志位,TCP首部的编制位中包含6个标志位。他们中的多个可被同时设置为1,含义分别为(1)URG:紧急指针有效(2)ACK:确认序号有效(3)PSH:接收方应该尽快将这个报文交给应用层(4)RST:重置连接(5)SYN:同步序号用来发起一个连接(...原创 2019-03-05 19:32:39 · 512 阅读 · 0 评论 -
网络编程四 TCP流式套接字编程
1.流式套接字网络编程的函数:socket(int af,int type,int protocol):af:一个地址描述符,目前仅支持AF_INET格式;type:指定套接字的类型;protocol:指定要使用的特定的传输协议 bind():三个参数分别为:调用套接字socket()反返回的描述符;地址参数;地址结构的大小 listen():指明监听队列长度 unix 上...原创 2019-02-28 15:32:33 · 1065 阅读 · 0 评论 -
网络编程五数据报套接字编程
1.与流式套接字编程相比不同的函数:sendto():数据报套接字描述符;要发送的字节序列的缓冲区;发送缓冲区的长度;套接字调用的方式;一个指向sockaddr结构的指针,保存服务器的端口号和IP地址;指定地址结构的长度(调用成功返回发送的字节数,否则返回SOCTKET_ERROR) recvfrom():数据报套接字描述符;要接收的缓冲区;接收缓冲区的长度;套接字调用的方式;一个指向soc...原创 2019-02-28 15:32:28 · 2106 阅读 · 0 评论 -
fork(三进程替换)
进程替换:exec指定一个程序把全新的程序加载到子进程中,子进程将会指向新进程 exec每个函数都有返回值,只有出错时返回值才会有效,正确时会被覆盖掉,也就没人接收了exec可以不用判断,拿到返回值就已经代表出错,int execl(char* pathname,char *argv0,char* argv1………..(char*)0)。/第一个参数是可执行文件的路径加名称/当前目录...原创 2019-01-14 21:11:40 · 219 阅读 · 0 评论 -
信号
1.发送信号:kill函数/命令kill(pid,信号):pid>0 发送给指定进程信号 pid=0发送给本进程组内的其他进程信号pid=-1 信号发送给处init进程外所有的进程,但是发送者需要拥有对所有目标进程发送信号的权限Pid<-1信号发送给组id为-pid的进程组中的所有成员信号的值一般都大于0若信号取值为0 kill不发送任何信号 但是sig=0可以用来检测...原创 2019-07-26 14:23:06 · 150 阅读 · 0 评论