小编Hao*_*hen的帖子

qemu-kvm如何在内部创建VM线程?

现在我正在做一个关于qemu-kvm和linux任务调度器的项目。我知道每个VCPU都是qemu为linux操作系统创建的正常任务。然后我尝试执行 qemu 命令来查看任务是如何创建的。我使用 strace 来跟踪所有系统调用。没有像“fork”或“pthreadcreate”之类的东西。但我见过这个:

open("/dev/kvm", O_RDWR|O_LARGEFILE)    = 3
ioctl(3, KVM_GET_API_VERSION, 0)        = 12
ioctl(3, KVM_CHECK_EXTENSION, 0x19)     = 0
ioctl(3, KVM_CREATE_VM, 0)              = 4
ioctl(3, KVM_CHECK_EXTENSION, 0x4)      = 1
ioctl(3, KVM_CHECK_EXTENSION, 0x4)      = 1
ioctl(4, KVM_SET_TSS_ADDR, 0xfffbd000)  = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x25)     = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xb)      = 1
ioctl(4, KVM_CREATE_PIT, 0xb)           = 0
ioctl(3, KVM_CHECK_EXTENSION, 0xf)      = 2
ioctl(3, KVM_CHECK_EXTENSION, 0x3)      = 1
ioctl(3, KVM_CHECK_EXTENSION, 0)        = 1
ioctl(4, KVM_CREATE_IRQCHIP, 0)         = 0
ioctl(3, KVM_CHECK_EXTENSION, 0x1a)     = 0
Run Code Online (Sandbox Code Playgroud)

所以看起来它打开了设备 …

linux kvm qemu

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

是否可以从sched_entity中找到相应的task_struct?

我知道如果我们有task_struct,我们可以得到包含的sched_entity,因为它是任务结构中的一个字段.但是我们可以在给定shed_entity的情况下获得指向task_struct的指针吗?以下是sched_entity结构:

struct sched_entity {
    struct load_weight  load;       /* for load-balancing */
    struct rb_node      run_node;
    struct list_head    group_node;
    unsigned int        on_rq;

    u64         exec_start;
    u64         sum_exec_runtime;
    u64         vruntime;
    u64         prev_sum_exec_runtime;

    u64         nr_migrations;


#ifdef CONFIG_SCHEDSTATS
    struct sched_statistics statistics;
#endif

#ifdef CONFIG_FAIR_GROUP_SCHED
    struct sched_entity *parent;
    /* rq on which this entity is (to be) queued: */
    struct cfs_rq       *cfs_rq;
    /* rq "owned" by this entity/group: */
    struct cfs_rq       *my_q;
#endif
};
Run Code Online (Sandbox Code Playgroud)

似乎没有地方可以获得task_struct.我的最终目标是获取任务group_leader的sched_entity包含具有此shed_entity的任务:>

linux scheduler linux-kernel

4
推荐指数
1
解决办法
1258
查看次数

Java中"=="和"等于"的区别

可能重复:
为什么这些==但不是equals()

我知道在Java中,"=="用于比较引用而不是值,而"equals"用于比较值.

然后如果

int a=100;
int b=100;
boolean c=(a==b);
Run Code Online (Sandbox Code Playgroud)

然后c会是假的?但我记得在我以前的项目中,似乎是真的....

java equals

3
推荐指数
1
解决办法
261
查看次数

使用hrtimer回调函数,是否可以给函数参数?

所以如果我使用像:

.............................

enum hrtimer_restart my_hrtimer_callback( struct hrtimer *timer )

.............................

hr_timer.function = &my_hrtimer_callback;
...............................
hrtimer_start(hr_timer,ktime,HRTIMER_MODE_REL);
...............................
Run Code Online (Sandbox Code Playgroud)

是否可以在计时器启动期间将任何参数传递给回调函数?我用谷歌搜索了一下,但没有找到线索。如何使用它?

谢谢;>

linux parameters callback

3
推荐指数
1
解决办法
2265
查看次数

Android(在ARM上)是否具有硬件性能计数器?

因此,就像在Intel处理器上的Linux中一样,我们需要访问大量的硬件性能计数器。像以前一样,使用名为perfmon2的用户空间软件,我可以获取高速缓存未命中率,由于某些原因(例如,L1高速缓存未命中)导致的CPU停止周期等值。

我的问题是,我们在Android中有这些东西吗?由于它基于ARM,因此我认为我们没有像x86那样强大的性能监视器计数器支持,对吗?

performance android monitor

3
推荐指数
2
解决办法
2944
查看次数

如何在Linux虚拟内存系统中尝试访问其他进程的内存

当我在Linux中学习虚拟内存系统时,我感到困惑.

由于每个进程都有自己的虚拟地址空间和自己的页表,将其虚拟地址转换为物理地址(我是对吗?),它怎么可能试图错误地访问其他进程的内存?页面表中应该没有条目,对吧?

linux virtual-memory

3
推荐指数
2
解决办法
3878
查看次数

为什么我们不应该在嵌入式系统中拥有不同大小的动态分配内存

我在嵌入式系统中听说过,我们应该使用一些预先分配的固定大小的内存块(比如好友内存系统?).有人能给我一个详细的解释原因吗?谢谢,

embedded memory-management dynamic-memory-allocation static-memory-allocation

3
推荐指数
2
解决办法
2690
查看次数

gitk给出“参数列表太长”错误

当我尝试使用“ gitk”打开一些大型仓库的历史记录的GUI时,总是出现“参数列表太长”错误。即使使用“ gitk -n”也不能解决问题。这里有人有同样的问题吗?谢谢,

couldn't execute "git": argument list too long
couldn't execute "git": argument list too long
    while executing
"open [concat $cmd $ids] r"
    (procedure "getallcommits" line 47)
    invoked from within
"getallcommits"
    (procedure "readcache" line 80)
    invoked from within
"readcache file13"
    ("eval" body line 1)
    invoked from within
"eval $script"
    (procedure "dorunq" line 11)
    invoked from within
"dorunq"
    ("after" script)
Run Code Online (Sandbox Code Playgroud)

git

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

有没有办法将 shell 脚本作为一个完整的任务(使用单个 PID)运行?

我有一个名为 run.sh 的 shell 脚本。在其中,我可以调用其他 shell 脚本,例如:

./run_1.sh
./run_2.sh
.........
Run Code Online (Sandbox Code Playgroud)

如果我通过 ./run.sh 调用脚本,我发现它实际上会使用不同的 PID 按顺序调用脚本内的不同任务(即 run_1.sh 将是一个任务,run_2.sh 将是另一个任务)。这使我无法使用一个“kill”命令杀死整组任务,或者通过运行“./run.sh &”在后台运行整组任务。那么有没有一种方法可以将脚本作为一个完整的任务来运行呢?

linux bash shell

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

为什么我不能在我的程序中读取logcat输出?

我已经搜索过,我发现下面的代码会让我的程序读取android中logcat的输出.但是,在我调用此函数后,没有任何反应.除了"logcat called"之外,没有任何内容通过system.out输出.I真的不知道发生了什么,因为这里的很多帖子告诉我这会有效:<

public void  Collector_logcat(){


    String stringbuffer="";
    String command="logcat -d";
    String command_c="logcat -c";
     System.out.println("logcat called\n"); 
    try{
        m_logcatprocess=Runtime.getRuntime().exec(command);
        m_logcat_inputreader=new InputStreamReader(m_logcatprocess.getInputStream());
        m_logcat_reader=new BufferedReader(m_logcat_inputreader);
      while((stringbuffer=m_logcat_reader.readLine())!=null){
          System.out.println(stringbuffer+"\n");  
      }

      Runtime.getRuntime().exec(command_c);

    }

        catch(Exception ex){
            System.out.println(ex.getMessage());
            System.out.println("error in Collector_logcat\n");
        }

     return ;

    }   
Run Code Online (Sandbox Code Playgroud)

android logcat android-logcat

0
推荐指数
1
解决办法
3015
查看次数

在C++中,是对象的名称(如队列,映射)引用(或指针)?

我只是一个简单的问题.举个例子,用C++中的函数:

queue<int> q1;
q1.push(1);
queue<int> q2=q1;
Run Code Online (Sandbox Code Playgroud)

我知道"q1"和"q2"本身只是地址(就像一个指针,我是对的吗?)可能存储在堆栈上,而真实数据存储在堆上.所以,如果我弹出q2,会出现1吗?

c++ variables pointers reference

0
推荐指数
1
解决办法
195
查看次数