Congestion 拥塞: 当某一通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。使得通过网络发送的数据包由于网络中充塞着数据包而经历极长延迟的情况。如果协议软件不能检测拥塞和减少包的发送率,那么网络就会因拥塞而瘫痪 。
拥塞是一种持续过载的网络状态,此时用户对网络资源(包括链路带宽、存储空间和处理器处理能力等)的需求超过了固有的容量。就Internet的体系结构而言,拥塞的发生是其固有的属性。因为在事先没有任何协商和请求许可机制的资源共享网络中,几个IP分组同时到达路由器,并期望经同一个输出端口转发的可能性是存在的,显然,不是所有分组可以同时接受处理,必须有一个服务顺序,中间节点上的缓存为等候服务的分组提供一定保护。然而,如果此状况具有一定的持续性,当缓存空间被耗尽时,路由器只有丢弃分组,才能保证网络避免出现锁死状况出现。
问题二:阻塞的意思是什么 就是某个进程/某段程序等待在那里,可以是等待某个信号、某个文件准备好,某个网络包数据接收完成等等。之后才可以继续运行。
问题三:什么是阻塞什么意思 堵塞指对局中的一方采取弃子手段使对方子力自行堵塞其将(帅)出路,或运用堵象(相)眼,象(相)路,破坏双象(相)联络的战术。
【词目】堵塞
【拼音】dǔsè
【释义】
1.动词。受到阻碍,使其不通畅,无法正常运转。
例:
1.网络堵塞.
2.血管堵塞.
3.交通堵塞.
2.另外用作名词。
用来阻挡液体或者一些流动性的物体,防止泄漏的阻挡物。
问题四:堵塞是什么意思? 不通畅
问题五:阻塞是什么意思 阻塞,指有障碍而不能通过,无法畅通。见《福惠全书.卷八.钱谷部.漕项收兑》:“催远离口岸,不得阻塞河路。”
问题六:java中的阻塞什么意思 程序运行到一行不运行了,等待有条件触发,如:
1:io阻塞,datagramesocket.recive()serversocket.recive()
2:线程阻塞,1:synch...(obj)等待obj解锁
2:wait(),等待其他线程的notify().
问题七:java中的阻塞式方法是什么意思,比如InputStream中的read()方法。 这个阻塞的意思就是说: 程序一直停在rea供()方法这里,等待数据。没有数据就不继续往下执行,至到得到数据。
问题八:思路阻塞是什么意思?这里阻塞是指什么意思?为什么要用阻塞来形容? 脑袋不开窍骇思路不广,思考问题钻牛角尖。
就是把思考问题的各个方向或方面比喻为道路,现实生活中道路由于车集中在一条路会发生阻塞的情况,思考问题也是这个道理,一个方向不行就应该从另一个方向去思考,就会取得满意的答案,也就是思路不会阻塞。
问题九:什么是阻塞 *** 作? 阻塞 *** 作
阻塞 *** 作是指,在执行设备 *** 作时,若不能获得资源,则进程挂起直到满足可 *** 作的条件再进行 *** 作。非阻塞 *** 作的进程在不能进行设备 *** 作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。
在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞 *** 作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。等待队列可以用来同步对系统资源的访问。
下面定义设备globalvar,它可以被多个进程打开,但是每次只有当一个进程写入了一个数据之后本进程或其它进程才可以读取该数据,否则一直阻塞。
#include #include #include #include #include #include MODULE_LICENSE(GPL)#define MAJOR_NUM 254static ssize_t globalvar_read(struct file *, char *, size_t, loff_t*)static ssize_t globalvar_write(struct file *, const char *, size_t, loff_t*)struct file_operations globalvar_fops ={ read: globalvar_read, write: globalvar_write,}static int global_var = 0static struct semaphore semstatic wait_queue_head_t outqstatic int flag = 0static int __init globalvar_init(void){ int retret = register_chrdev(MAJOR_NUM, globalvar, &globalvar_fops)if (ret) { printk(globalvar register failure)} else { printk(globalvar register success)init_MUTEX(&sem)init_waitqueue_head(&outq)} return ret}static void __exit globalvar_exit(void){ int retret = unregister_chrdev(MAJOR_NUM, globalvar)if (ret) { printk(globalvar unregister failure)} else { printk(globalvar unregister success)}}static ssize_t globa......>>
问题十:什么是线程阻塞 线程A等待线程B的数据,线程B等待线程A的数据,互相等待,就会陷入阻塞,这也是一种线程阻塞。
阻塞状态是正在运行的线程遇到某个特殊情况。例如,延迟、挂起、等待I/O *** 作完成等。 进入阻塞状态的线程让出CPU,并暂时停止自己的执行。线程进入阻塞状态后,就一直等待,直到引起阻塞的原因被消除,线程又转入就绪状态,重新进入就绪队列排队。
work queue是一种bottom half,中断处理的后半程,强调的是动态的概念,即work是重点,而queue是其次。wait queue是一种「任务队列」,可以把一些进程放在上面睡眠等待某个事件,强调静态多一些,重点在queue上,即它就是一个queue,这个queue如何调度,什么时候调度并不重要
等待队列在内核中有很多用途,尤其适合用于中断处理,进程同步及定时。这里只说,进程经常必须等待某些事件的发生。例如,等待一个磁盘 *** 作的终止,等待释放系统资源,或者等待时间经过固定的间隔。
等待队列实现了在事件上的条件等待,希望等待特定事件的进程把放进合适的等待队列,并放弃控制权。因此。等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒进程。
等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头,等待队列头是一个类型为wait_queue_head_t的数据结构。
等待队列链表的每个元素代表一个睡眠进程,该进程等待某一事件的发生,描述符地址存放在task字段中。然而,要唤醒等待队列中所有的进程有时并不方便。例如,如果两个或多个进程在等待互斥访问某一个要释放的资源,仅唤醒等待队列中一个才有意义。这个进程占有资源,而其他进程继续睡眠可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定义一个新的等待队列,该宏静态地声明和初始化名为name的等待队列头变量。 init_waitqueue_head()函数用于初始化已动态分配的wait queue head变量等待队列可以通过DECLARE_WAITQUEUE()静态创建,也可以用init_waitqueue_head()动态创建。进程放入等待队列并设置成不可执行状态。
工作队列,workqueue,它允许内核代码来请求在将来某个时间调用一个函数。用来处理不是很紧急事件的回调方式处理方法.工作队列的作用就是把工作推后,交由一个内核线程去执行,更直接的说就是写了一个函数,而现在不想马上执行它,需要在将来某个时刻去执行,那就得用工作队列准没错。
如果需要用一个可以重新调度的实体来执行下半部处理,也应该使用工作队列。是唯一能在进程上下文运行的下半部实现的机制。这意味着在需要获得大量的内存时、在需要获取信号量时,在需要执行阻塞式的I/O *** 作时,都会非常有用。
DEFINE_WAIT(my_wait) wait_queue_t my_waitinit_wait(&my_wait)2)将等待队列项添加到等待队列头中,并设置进程的状态
prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
3)调用schedule(),告诉内核调度别的进程运行
4)schedule返回,完成后续清理工作
finish_wait()3. 手工休眠方式二: 1)建立并初始化一个等待队列项:
DEFINE_WAIT(my_wait) wait_queue_t my_waitinit_wait(&my_wait)
2)将等待队列项添加到等待队列头中:
add_wait_queue
3)设置进程状态
__set_current_status(TASK_INTERRUPTIBLE)
4)schedule()
5)将等待队列项从等待队列中移除
remove_wait_queue()其实,这种休眠方式相当于把手工休眠方式一中的第二步prepare_to_wait拆成两步做了,即prepare_to_wait add_wait_queue + __set_current_status,其他都是一样的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)