小编vja*_*n27的帖子

系统调用和上下文切换

我很遗憾在问到这个问题时会问这个问题,但我无法从他们那里得到澄清.所以我要问以下相关问题来区分系统调用(模式切换)和上下文切换

  • 为什么在进行调用的进程的上下文必须保存然后重新加载时,系统调用不需要上下文切换.是否只是因为根据上下文切换的定义,必须对另一个进程进行切换.

  • 在进行系统调用时,内核在"用户上下文"中执行是什么意思.

  • 根据维基百科文章:http://en.wikipedia.org/wiki/Context_switch

系统调用不需要上下文切换,但它取决于操作系统,并且在系统调用期间可能会发生上下文切换.我想知道在系统调用时发生上下文切换的情况会发生什么.任何例子?

operating-system process system-calls

38
推荐指数
1
解决办法
2万
查看次数

为什么内核被称为进程地址空间?

这可能是一个愚蠢的问题,但它只是突然出现在我的脑海里.所有关于进程地址空间和虚拟内存布局的文本都提到进程地址空间有为内核保留的空间.例如,在32位系统上,进程地址空间为4GB,其中1GB为Linux中的内核保留(在其他操作系统上可能不同).

我只是想知道为什么当进程无法直接处理内核时,内核被称为进程地址空间.为什么我们不说内核有一个单独的地址空间而不是一个进程?为什么我们不能为内核本身提供一个与进程的页表分开的不同的页表?

operating-system memory-management process

17
推荐指数
1
解决办法
1806
查看次数

在这里使用尾递归有什么好处?

我一直在阅读文章,描述如何通过使用尾递归版本来减少快速排序的空间复杂性,但我无法理解这是怎么回事.以下是两个版本:

QUICKSORT(A, p, r)
       q = PARTITION(A, p, r)
       QUICKSORT(A, p, q-1)
       QUICKSORT(A, q+1, r)


TAIL-RECURSIVE-QUICKSORT(A, p, r)
   while p < r
      q = PARTITION(A, p, r)
      TAIL-RECURSIVE-QUICKSORT(A, p, q-1)
      p = q+1
Run Code Online (Sandbox Code Playgroud)

(来源 - http://mypathtothe4.blogspot.com/2013/02/lesson-2-variations-on-quicksort-tail.html)

据我所知,这两个都会导致数组的左半部分和右半部分的递归调用.在这两种情况下,一次只处理一半,因此在任何时候只有一个递归调用将使用堆栈空间.我无法看到尾递归快速排序如何节省空间.

上面的伪代码取自文章 - http://mypathtothe4.blogspot.com/2013/02/lesson-2-variations-on-quicksort-tail.html文章中 提供的解释让我更加困惑 -

Quicksort对给定的子数组进行分区并继续递归两次; 一个在左子阵列上,一个在右侧.这些递归调用中的每一个都需要其自己的堆栈空间流.此空间用于在某种递归级别存储数组的索引变量.如果我们想象这是从执行的开始到结束发生的,我们可以看到堆栈空间在每一层加倍.

那么Tail-Recursive-Quicksort如何修复所有这些呢?

好吧,我们现在只对一个子阵列进行递归,而不是在两个子阵列上递归.这消除了在每个执行层加倍堆栈空间的需要.我们通过使用while循环作为执行相同任务的迭代控件来解决这个问题.我们只需更改同一组变量并对新变量使用单个递归调用,而不是需要堆栈为两个递归调用保存变量集.

在常规快速排序的情况下,我没有看到堆栈空间在每个执行层都是如何加倍的.

注意: - 文章中没有提到编译器优化.

algorithm tail-recursion quicksort

16
推荐指数
2
解决办法
9594
查看次数

如何在visual studio控制台应用程序中禁用控制台窗口的关闭按钮?

我需要禁用用C#编写的visual studio控制台应用程序的控制台窗口中的关闭按钮.我希望应用程序运行直到它完成,用户不能通过关闭控制台窗口来停止它.我正在使用visual studio 2010

.net c# console

15
推荐指数
1
解决办法
1万
查看次数

为什么c/c ++允许在函数调用中省略多维数组的最左边索引?

我只是想知道为什么在将数组传递给函数时允许省略多维数组的最左边索引?为什么不是一个以上的索引?编译器如何在省略一个索引的情况下找出大小?

c c++ compiler-construction language-design

14
推荐指数
2
解决办法
3203
查看次数

gnu程序集中.byte汇编程序指令的用途是什么?

在浏览一些具有内联汇编的C代码时,我遇到了.byte(开头有一个Dot)指令.

在检查Web上的程序集引用时,我发现它用于在内存中保留一个字节.

但是在代码中,声明之前没有标签.所以我想知道什么是未标记的.byte指令或任何其他数据存储指令的用途.

例如,如果我编码.byte 0x0a,我该如何使用它?

assembly gnu-assembler inline-assembly

14
推荐指数
2
解决办法
2万
查看次数

在OO设计中避免RTTI

我最近在某个论坛上看到了一个OO设计问题,并开始考虑使用RTTI.然而,这一定是糟糕的设计,但我无法想到另一种选择.这是一个简单的问题:

使用OO概念为以下场景创建C++程序 -

我的名叫巴迪的狗住在后院.晚上,当他看到一只猫或一只来看望的松鼠时,他会吠叫.如果他看到一只青蛙,并且他饿了,他就会吃掉它.如果他看到一只青蛙并且他不饿,他就会玩它.如果他已经吃了2只青蛙,并且仍然感到饥饿,他会放手.如果他看到一只土狼,他会求助.有时他的朋友Spot停了下来,他们互相追逐.如果他看到任何其他动物,他只是看着它.我希望你会有一个动物类,一只猫,狗,松鼠,土狼类继承自动物类.

我开始考虑在dog类中使用一个see()方法,该方法接受一个Animal参数然后检查对象的实际类型(青蛙,猫等)并采取所需的操作 - 根据实际类型进行游戏,追逐等.然而,这将需要RTTI,这必须是糟糕的设计.任何人都可以建议一个更好的设计,这将避免RTTI,并指出我的想法中的错误?

c++ oop rtti

10
推荐指数
2
解决办法
2440
查看次数

为什么深度优先搜索说遭受无限循环?

我已多次阅读有关DFSBFS的内容,但我对此长期以来一直怀疑.在很多文章中提到DFS可能陷入无限循环.

据我所知,通过跟踪访问的节点可以很容易地消除这种限制.事实上,在我读过的所有书中,这个小支票都是DFS的一部分.

那么为什么"无限循环"被提到是DFS的缺点呢?是不是因为原始DFS算法没有对访问过的节点进行此检查?请解释.

algorithm search breadth-first-search depth-first-search

9
推荐指数
1
解决办法
9540
查看次数

遗传算法处理负健身值

我正在尝试实现遗传算法以最大化n个变量的函数.然而问题是健身值可能是负的,我不确定如何在做选择时处理负值.我读过这篇文章遗传算法中的线性适应度缩放会产生负的适应度值, 但我不清楚如何处理负适应度值以及如何计算比例因子a和b.

另外,从文章中我知道轮盘赌选择仅适用于积极适应值.锦标赛选择也一样吗?

genetic-algorithm

9
推荐指数
2
解决办法
3244
查看次数

如何在内核模块中查找物理和逻辑核心编号?

Linux中的内核函数是否会返回运行内核模块的物理内核和逻辑内核(在超线程的情况下)的数量?

kernel-module hyperthreading linux-kernel

8
推荐指数
1
解决办法
5263
查看次数