小编Eri*_*son的帖子

除了malloc/free之外,程序还需要操作系统提供其他任何东西吗?

对于我正在研究的操作系统,我正在设计内核(我将实际上称之为"核心"只是为了与众不同,但它基本相同).如果我无法完成多任务,内存管理和其他基本操作,那么操作系统本身的细节就无关紧要了,所以我需要先解决这个问题.我有一些关于设计malloc例程的任务.

我认为malloc()要么是内核本身的一部分(我倾向于这个),要么是程序的一部分,但是我将不得不编写自己的C标准库实现方式,所以我写了一个malloc.在这方面我的问题实际上相当简单,C(或C++)如何管理它的堆?

我在理论类中一直被教导的是,堆是一个不断扩展的内存块,从指定的地址开始,并且在很多方面表现得像堆栈一样.通过这种方式,我知道在全局范围内声明的变量在开头,并且更多的变量被"推"到堆上,因为它们在各自的作用域中声明,超出作用域的变量只留在内存空间中,但是该空间被标记为空闲,因此如果需要,堆可以扩展更多.

我需要知道的是,C实际上如何以这种方式处理动态扩展堆?编译的C程序是否自己调用malloc例程并处理自己的堆,还是需要为它提供自动扩展的空间?另外,C程序如何知道堆的开始位置?

哦,我知道相同的概念适用于其他语言,但我希望任何示例都在C/C++中,因为我对这种语言最为满意.我也不想担心其他事情,比如堆栈,因为我认为我能够自己处理这样的事情.

所以我想我真正的问题是,除了malloc/free(处理获取和释放页面本身等)之外,程序是否需要操作系统提供其他任何东西?

谢谢!

编辑我更感兴趣的是C如何使用malloc与堆相关而不是在malloc例程本身的实际工作中.如果它有帮助,我在x86上这样做,但C是交叉编译器所以它应该没关系.^ _ ^

进一步编辑:我理解我可能会对术语感到困惑.我被教导说"堆"是程序存储诸如全局/局部变量之类的东西.我习惯于在汇编编程中处理"堆栈",我只是意识到我可能意味着相反.对我的一点研究表明,"堆"更常用于指代程序为自己分配的总内存,或者操作系统提供的内存页面的总数(和顺序).

那么,考虑到这一点,我如何处理不断扩大的堆栈?(看来我的C理论课有点......有缺陷.)

heap malloc operating-system kernel osdev

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

Eclipse Metrics插件

我正在寻找一个Eclipse插件,它每天测量我对项目的活动.我想有一个统计数据显示我添加了多少LOC,测试,类等.另外我希望它能在没有服务器的情况下工作.

我正在使用Eclipse 3.7和3.6.

eclipse code-metrics

10
推荐指数
1
解决办法
1694
查看次数

如何在Android中振动系统默认模式?

我知道Vibrate类以及如何使用它,但在哪里可以使用系统默认振动模式?或者是否有某种意图我可以启动以使系统振动其默认振动?

android android-vibration

10
推荐指数
1
解决办法
2902
查看次数

我需要学习什么样的C++才能制作自己的操作系统内核?

什么样的C++(重新编程)我必须学会制作自己的操作系统内核?(我知道我也必须学习装配.)编辑***像中断,键盘驱动程序,输入.***

好的,我做了一个真正的*3基本操作系统并希望分享它.

干得好. http://bcsy.hostzi.com/BytOS.zip

在linux上编译

c++ assembly operating-system

9
推荐指数
6
解决办法
9194
查看次数

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

如何在应用程序中始终保持框架在顶部,但在Java中使用其他应用程序时将其置于后台?

我的Java应用程序有多个框架.其中一些将始终位于顶部.但是,当用户打开另一个程序(比如一个Web浏览器)时,我希望始终在顶部的帧移动到后台,让其他应用程序在屏幕上完全显示.

java swing jframe hide always-on-top

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

部分嘲笑作为代码气味?

为什么关于"部分嘲笑"以及需要它的代码会有如此多的仇恨?

这是一个(理论上)示例实现:

public ComplexResult1 operationA(Stimulus a) {
    {
        ...
        result = ...;
    }
    auditTheChange(a);
}
public ComplexResult2 operationB(Stimulus b) {
    {
        ...
        result = ...;
    }
    auditTheChange(b);
    return result;
}
void auditTheChange(Stimulus stim) {
    // do a bunch of stuff to record the change
    // and interact with another outside service
}
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,这是重构良好的代码.

如果我想UNIT测试operationA和operationB,确保在每个场景中都进行审计,但不必测试审计代码的细节,我会使用部分模拟.

我没有看到/理解导致如此多的项目(EasyMock,Mockito等)推荐重构?

java refactoring mocking partial-mocks

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

在维护具有大量线程的Java应用程序时,我需要了解什么?

背景资料

我有一个分布式处理应用程序来进行数据分析.它旨在并行处理实时更新的多组数据.作为设计的一部分,分析已经分解为分析节点.每个节点获取源数据并对其进行处理以创建其他数据,然后可以由其他节点使用.要对一个数据集进行当前的全套分析,需要大约200个节点.

在当前设计中,每个节点都使用自己的线程运行.现在,大多数时候这些线程都处于睡眠状态.每当数据更新时,他们就像瀑布一样唤醒,然后他们又回到睡眠状态.该应用程序目前正在生产中运行40组数据,每组需要200个节点,使用8000个线程.当没有数据进入时,服务器上没有负载.当数据以最繁忙的时间进入时,服务器的CPU占用率约为25%.这都在项目的设计和生产参数范围内.

现在进行下一步,我们将40组数据扩展到200.每组需要200个节点,这意味着总共40000个节点,即40000个线程.这超出了我们服务器的最大PID,所以我要求我们的服务器管理员增加上限.他们做到了,应用程序正常运行,但是他们给了我一些关于线程数量的推迟.我并不否认线程的数量是不寻常的,但我们的设计阶段是预期和保证的.

我正在计划对设计进行一些小的调整,以将线程与节点分开.这将允许我们配置一个线程来运行多个节点,并减少我们的线程数.对于不经常更新的数据集,让一个线程在每个节点中执行数据更新的性能影响非常小.对于每秒更新数百次的数据集,我们可以将每个节点配置为在其自己的线程上运行.事实上,我不怀疑这种设计会发生什么变化 - 这只是时间问题.与此同时,我希望尽可能多地了解使用此设计的后果.

在一台机器上运行超过40,000个线程的成本是多少?通过让JVM/Linux操作系统管理这么多线程,我失去了多少性能?请记住,当没有工作时,它们都已正确配置为睡眠状态.所以,我只是谈论额外的开销和线程数量导致的问题.

请注意 - 我知道我可以减少线程数,我知道改变这个设计是个好主意.我会尽快做到,但必须与其他工作和设计考虑因素保持平衡.我问这个问题是为了收集信息以做出正确的决定.您对这种性质的想法和评论非常感谢.

java optimization performance multithreading

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

我如何收听鼠标滚轮按?

有没有办法听老鼠轮按下(不移动滚轮,只是按下它)?

我已经检查了MouseWheelListener API,但鼠标滚轮按下没有任何东西,只是车轮移动.

java swing mousewheel

7
推荐指数
1
解决办法
2254
查看次数

Java中的循环LinkedList

我通过阅读一本书来刷新我的数据结构,其中一个问题是通过不使用"第一"和"最后"指针来构建循环单链接列表,而是允许通过使用一个引用来访问它当前".我不确定我是否理解这个问题,我一直以为我至少需要第一个或最后一个.这是我的实现,但它有"第一",不知道如何解决它.您能评论我如何调整我的代码以消除对第一个的依赖吗?

class Link {
    public int iData;              
    public Link next;              

    public Link(int id) { // constructor
        iData = id;                         
    }                          

    public void displayLink() {
        System.out.print(iData + " ");
    }
}  // end class Link
Run Code Online (Sandbox Code Playgroud)

然后这是列表本身:

public class CircularLinkedList {
    private Link first;
    private Link current;    

    public Link getCurrent(){
        return current;
    }

    public void setCurrent(int data){

    }

    public void advance(){
        current = current.next;
    }

    public void insert(int data) {
        Link newLink = new Link(data);
        if (first == null) { 
            first = …
Run Code Online (Sandbox Code Playgroud)

java linked-list data-structures

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