如果说,有人问你,Linux操作系统对进程的调度是采用什么方式?也许,你会回答说,不就是优先级和时间片么?对,没错,我们所知道的就是这两种方法。但是,在Linux内核中到底对这两种方法是如何诠释的呢?那么就得看看源码了,下面的内容纯属自己对进程调度的理解,如有错误,烦请提出~ 看源码,如何看?首先你得下个源码包,我这里看的是linux-3.18.21版本的源码,而我们今天所要看的进程调度的源码是在linux-3.18.21/kernel/sched这个目录中的一些文件,因为在之前也有老师的研究生过来讲过O(1)和CFS算法,我比较笨,并没有听懂他讲了什么,也不好意思问,因为没看过源码没有话语权。。。所以先看看源码吧 要说进程调度,就得先看看描述进程信息的结构体:struct task_struct,在linux-3.18.21/include/linux/sched.h中,其结构体中的部分内容如下: 值得注意的是结构体中的volatile int state;这个变量标示的是进程的当前状态,同样在这个结构体中也有宏定义的进程的状态如下: # 继续阅读 >>


崔姣姣 15/11/08 22:32:04
                                                                                                      ————总结过往,勉励未来。 抛砖一下:什么是socket?我们平时用socket干嘛? 今天先从网络套接字socket的基本概述讲起,紧接着用一个简单的例子(简易版聊天室)来熟悉socket的一系列函数的应用。 首先, socket是什么? socket本 继续阅读 >>


崔姣姣 15/10/28 11:53:16
       深深地愧疚,时隔多日,才写了当初答应好的文章。并不是因为懒,而是因为真的觉得要写一个东西得花费点时间,花费点精力,不断考证,知道自己真正理解了其中的含义,才能用笔头写出来。虽然最近在忙着公司实习这边的项目,但是还是想用周天这一晚上来总结下之前打算写的<干货来袭系列>之二:epoll的两种工作方式:LT   ET,所以,闲话就不多说了,开始吧~        相信大家看完上一篇的<干货来袭系列>之一:select poll epoll,也已经体会到了epoll功能的强大,并且据我所知,在socket编程时大多数人会采用epoll。当然了,epoll的两种工作方式LT和ET模式,这两种工作方式的选择得根据需要而定,不能盲目的只选择ET或LT模式。下面就分别说说这两种工作模式吧~         LT(Level Trigger,水平触发)是默认的工作方式,并且同时支持阻塞和非阻塞socket, 继续阅读 >>


崔姣姣 15/08/16 14:52:41
好久没有写文章,好久没有总结自己的学习了。最近,会带了一系列干货,总结过去,勉励以后。废话不多说,先来一系列I/O复用浅析。 先思考一个问题:你觉得I/O复用有什么好处?有没有用过select、poll、epoll?epoll为什么比较好? 活跃你的思维,想一想,如果是你,你会怎么回答这几个问题? 那么,我想先说一下,什么是I/O多路复用机制? 所谓I/O多路复用机制就是说通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪,能够通知程序进行相应的读写操作。(I/O复用虽然能同时监听多个文件描述符,但是它本身却是阻塞的。并且当一个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依次处理其中的每个文件描述符,这样就相当于服务端工作方式为串行的;所以必须采用多进程或多线程来实现并发。)那么,我选择其中的select、poll、epoll三组I/O复用系统调用进行解说。 首先,说说select select系统调用的用途:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写、异常事件。(摘自《Linux高性能服务器编程》) 继续阅读 >>


崔姣姣 15/03/29 09:52:10
不知何时,忘记了博客,更忘记了用博客来记录自己学习和生活中的点点滴滴。今晚看了自己这一年的博客,仅仅只有两篇,而且写出来的东西我自己都不想看,感觉很水。尤其是看到曾经关注我的博客的人都将我的链接踢掉的时候,我才真正认识到了一个问题:既然什么博客都没有发表,没有动态,没有博文的博客还值得别人去关注,去访问吗?   我开始质疑自己,这一年都学到了什么,为什么如此颓废,为什么如此没有自信?难道真的放弃了写博客了吗?难道真的没有记录这一年所学的东西吗?   我想说:不,我记录了,只是感觉自己所写的东西都达不到自己想要地高度。有时候,一个问题,抛出来很简单,最开始地时候也觉得,这个问题不算是问题,觉得自己稍微整理一下就可以写一篇博客发表出来,但是,,,现实往往并非如此,当拿到一个问题后,四处查资料,不断地探究,不断地深究时,会慢慢地发现,这个问题真的不是很简单。一直想着让自己写出来的博客能够更完美,更能将整个知识体系结构展现出来,一直在追寻着这种完美,,,,但最终却将写出来的那些有头无尾的博文无情地放进了草稿箱。 & 继续阅读 >>


崔姣姣 14/12/30 22:25:42
问题:read 函数(man 2)的返回值有什么含义? 当然没那么简单,请说出read用于设备文件、普通文件和套接字时候的返回值含义,(套接字区分阻塞型和非阻塞型) 问题来源:http://faq.0xffffff.org/question/2014/07/30/read-function-return-code/ 以下是本人的解答,纯属个人理解。 解答: 在文件那一章我们用到了read函数,它可以读取设备文件和普通文件中的数据,同时在网络编程中也会用到该函数,读取来自socket的数据。 NO.1  read函数的基本原型 ssize_t read(int fd, void *buf, size_t nbytes); 先说一下各参数的含义:参数fd,是文件描述符;参数buf用来存放读到的数据内容,(void *)表示通用指针(看一些开源代码的话会经常碰见);参数nbytes是请求读取的字节数。 还有就是返回值问题:read函数总共会有三种返回值情况,A.若成功,返回读到的字节数;B. 继续阅读 >>


崔姣姣 14/07/31 14:26:42
忙完了课程设计的代码部分,这两天就在这琢磨,怎样才能将写好的代码传到github上去(之前申请了帐号,但一直还没用过。。。) 之前实验室的哥们也给我教过怎样往github上上传代码,but,,我就是不怎么好好用,同时也感觉他们的方法有的还有点麻烦。 今天一个上午都在查找资料,学习怎样将代码传到托管上去,网上的说法有很多,但还是觉得如果自己学会了,写个东西和大家分享交流一下得到的效果会更好。 在最初实际操作中,或多或少会感到,这怎么这么麻烦。。。有种想摔了电脑的冲动,多亏了没那样做,不然。。。 好了,说下我的学习之路,有错误的地方,大神们如果看到的话,帮忙指出,谢谢! 一步一步来,提前声明,我写的这个博客可以在当前目录下往github 上上传文件,这个还是很欣慰的。 <1>先在自己的git上创建一个库,即new 一个Repositories <2>创建公钥,起名为rsa ssh-keygen -t rsa -c "youremail@youemail.com" <3>其次是查看公钥,并复制公钥 继续阅读 >>


崔姣姣 14/06/11 12:27:26
前段时间舍友问我指针数字和数组指针有什么区别,虽然告诉她什么是数组指针,什么又是指针数组,但老感觉什么地方怪怪的,查了下资料,做个小笔录。 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 int* a[4]     指针数组                       表示:数组a中的元素都为int型指针                      元素表示:*a[i]   继续阅读 >>


崔姣姣 13/12/01 17:15:10
很实用,先留着。 原文地址:http://blog.csdn.net/hackbuteer1/article/details/8035261 1、快速找出一个数组中的最大数、第二大数。      思路:如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。 [cpp] view plaincopy void GetSecondMaxNumber(int *arr , int n)  {      int i , max , second_max;     &nb 继续阅读 >>


崔姣姣 13/11/24 16:47:56
     在计算机领域有一棵树,叫做哈夫曼树,最近一周我都被挂在这棵树上,今天晚上,也就是在写博客之前,我才灰溜溜地做完了我的哈夫曼树。      言归正传,所谓哈夫曼树,其实就是最优树,解决文件的压缩与解压,下来就是我对哈夫曼的一些细节问题小结:      0. 首先得知道它的结构体类型:          typedef struct huffman          {                      char data;     继续阅读 >>


崔姣姣 13/11/20 21:36:44