小编dex*_*ous的帖子

静态变量和全局变量都驻留在数据段中.尽管如此,静态变量的范围有限.为什么?

在典型的C程序中,静态变量和全局变量都驻留在数据段上.静态变量的范围仍限于文件.相反,可以从任何地方访问全局变量.为什么会发生这种情况,尽管它们都存在于同一个内存中?

c

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

当存在页面错误时,虚拟内存区域结构是否仅进入画面?

虚拟内存对我来说是一个非常复杂的话题.我想了解它.以下是我对32位系统的理解.示例RAM仅为2GB.我试过阅读很多链接,目前我并不自信.我希望你们有人帮助我清理我的概念.请承认我的观点,也请回答你的错误.在我的观点中,我也有一个困惑的部分.所以,这里开始总结.

  1. 每个进程都认为它只是在运行.它可以访问4GB的内存 - 虚拟地址空间.

  2. 当进程访问虚拟地址时,它将通过MMU转换为物理地址.该MMU是CPU的一部分 - 硬件.

  3. 当MMU无法将地址转换为物理地址时,会引发页面错误.

  4. 在页面错误时,会通知内核.内核检查VM区域结构.如果它能找到它 - 可能在磁盘上.它会做一些页面输入/页面输出.并在RAM上获取此内存.

  5. 现在MMU将再次尝试并且这次将成功.

  6. 如果内核找不到地址,它将发出一个信号.例如,无效访问将引发SIGSEGV.

困惑点.

  1. Page表是否在内核中维护?这个VM区域结构有一个页表?

  2. MMU如何在物理RAM中找不到该地址.让我们说它转换为RAM中的一些错误地址.代码仍将执行,但它将是一个糟糕的地址.MMU如何确保正在读取正确的数据?它是否每次都参考内核VM区域?

  3. Mapping表 - 虚拟到物理是否在MMU内.我读过它是由一个单独的过程维护的.如果它在一个过程中,为什么我看不到它.或者,如果它是MMU,MMU如何生成地址 - 是Segment + 12位移位 - >页面帧编号,然后添加偏移(位-1到10) - >给出物理地址.对于32位架构而言,这是否意味着我的想法.我可以从虚拟地址确定物理地址.

  4. cat/proc/pid_value/maps.这向我展示了vmarea的当前映射.基本上,它读取Vmarea结构并打印它.这意味着这很重要.我无法完整地了解这一部分.执行程序时,会生成vmarea结构.当MMU无法转换地址(即页面错误)时,VMAREA是否仅进入画面?当我打印vmarea时,它显示地址范围,权限并映射到文件描述符和偏移量.我确信这个文件描述符是硬盘中的文件描述符,偏移量是该文件的.

  5. 高内存概念是内核无法直接访问大于1 GB(大约)的内存区域.因此,它需要一个页表来间接映射它.因此,它会临时加载一些页表来映射地址.HIGH MEM每次都会进入画面吗?因为Userspace可以通过MMU直接转换地址.在什么情况下,内核真的想要访问高MEM.我相信内核驱动程序主要使用kmalloc.这是直接内存+偏移地址.在这种情况下,实际上不需要映射.因此,问题是内核需要访问High Mem的场景.

  6. 处理器是否专门配备了MMU支持.那些没有MMU支持的人无法运行LInux?

c linux linux-kernel

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

如何检查内核中是否启用了SMP?

我想知道如何在运行的计算机上检查内核是否配置为SMP?当然,我可以查看内核.config文件并进行搜索。但是,问题是,我没有源代码,如何检查SMP配置?是否有任何proc文件要检查?

下面说我没有多核:

#cat /proc/cpuinfo

processor               : 1
cpu model               : Broadcom BMIPS5000 V1.1  FPU V0.1
BogoMIPS                : 651.26
cpu MHz                 : 1305.018
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 64
extra interrupt vector  : yes
hardware watchpoint     : no
ASEs implemented        :
shadow register sets    : 1
kscratch registers      : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available
Run Code Online (Sandbox Code Playgroud)

输出为uname -a

Linux 136.170.193.3 3.3.8-2.4 #2 SMP …
Run Code Online (Sandbox Code Playgroud)

linux-kernel embedded-linux

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

在机顶盒中使用dvb三联体有什么用?

我看到识别服务的方式是通过DVB三元组.DVB三联体是如何形成的,以及它如何保证独特?

dvb

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

获取 malloc 合并错误的示例程序

我想首先在我的电脑上测试 mcheck 功能以检测 malloc 合并错误。这样,我确信这将有助于解决嵌入式 Linux 机器上的类似崩溃问题。不幸的是,崩溃至少需要 3-4 天。因此,我正在寻找一个示例程序,该程序将生成类似的崩溃,如下所示。

 Program terminated with signal 6, Aborted.
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
15  static inline _syscall2(int, __syscall_kill, __kernel_pid_t, pid,
int, sig);
Current language:  auto; currently c
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
    __res = 716485696
    __err = 16
#1  0x2c73eb5c in kill (pid=900, sig=6) at kill.c:19
No locals.
#2  0x2aafb2e0 in pthread_kill (thread=900, signo=6) at signals.c:73
    handle = (pthread_handle) 0x2ab3f2e0
    pid = 900
#3  0x2aafbbb8 in raise …
Run Code Online (Sandbox Code Playgroud)

c malloc valgrind uclibc embedded-linux

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

设置Jenkins电子邮件-通知时出错?

这是在Jenkins配置上完成的。我在配置电子邮件时使用以下字段。

E-mail Notification
    SMTP server smtp.gmail.com Help for feature: SMTP server


    Default user e-mail suffix : @gmail.com 

Use SMTP Authentication Help for feature: Use SMTP Authentication

    User Name shreyasjoshi12@gmail.com  

    Password  sincity   

    Use SSL     Help for feature: Use SSL


    SMTP Port       Help for feature: SMTP Port


    Reply-To Address    

    Charset 

Test configuration by sending test e-mail
    Test e-mail recipient   
Run Code Online (Sandbox Code Playgroud)

这就是我遇到的错误。我对Java部分完全不了解。这些错误对我来说毫无意义。请帮助解决这里的问题。

Failed to send out e-mail

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. hi5sm58745870pbb.43 - gsmtp

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
    at …
Run Code Online (Sandbox Code Playgroud)

email jenkins jenkins-plugins

5
推荐指数
0
解决办法
7035
查看次数

访问说明符对于朋友函数是否重要?

在一个类中,如果函数在不同的说明符中声明为friend,例如private,protected或public,那么是否有任何区别.据我了解,朋友的功能不是会员.因此,它应该无关紧要.但是,如果我看到静态 - 它也不是成员,但访问说明符很重要.所以,我有点困惑.所有这些代码如何工作正常?以下课程有什么不同吗?

/** Private friend function **/

class frienddemoFunction
{
  private:
      unsigned int m_fanSpeed;
      unsigned int m_dutyCycle;
      /** This function is not a member of class frienddemo **/
      friend void printValues(frienddemoFunction &d);

  public:
      void setFanSpeed(unsigned int fanSpeed);
      unsigned int getFanSpeed();

};


/** Protected -- Friend Function **/
class frienddemoFunction
{
  private:
      unsigned int m_fanSpeed;
      unsigned int m_dutyCycle;

  public:
      void setFanSpeed(unsigned int fanSpeed);
      unsigned int getFanSpeed();

 protected:

 /** This function is not a member of class frienddemo **/
      friend void …
Run Code Online (Sandbox Code Playgroud)

c++ friend

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

为什么电栅栏/ Valgrind无法捕获这个缓冲区溢出问题?

我创建了一个错误的程序 - buggy.c - 这是缓冲区t的缓冲区溢出方案.您可以看到我正在编写超过5个索引.它工作正常.它永远不会给我一个错误.我在想,为什么会那样?我甚至试过Valgrind,这也找不到这个问题.你能告诉我这里有什么问题吗?

void buffer_overflow(void)
    {
      int t[5];
      int i = 0;

      for(i = 0; i<=7; i++)
      {
        t[i] = i;  

      }


      /** this will cause buffer overflow **/   
      printf("Memory_overflow_completed\r\n");

    }


    int main(int argc, char **argv)
    {

      buffer_overflow();

      return 0; 
    }

    $gcc -g buggy.c -o buggy.out -lefence

$./buggy.out
Run Code Online (Sandbox Code Playgroud)

但是,我没有遇到任何崩溃.这里没有电栅栏的效果.我错过了什么?我看到这里发布的类似问题gcc用电栅栏库没有生效,但似乎还没有答案.我在FC19上运行这个例子.有人有答案吗?即使是valgrind也未能发现问题?还有其他工具可以检测这些问题吗?

根据进一步的评论,我修改了缓冲区溢出函数,以便被Electric Fence检测到.但是,电围栏无法检测到这个问题.这是修改后的功能.

void buffer_overflow(void)
{

  #if 0
  int t[5];
  int i = 0;

  for(i = 0; i<=7; i++)
  {
    t[i] = i;  

  }
  #endif

  char *t = …
Run Code Online (Sandbox Code Playgroud)

c c++ valgrind memory-leaks electric-fence

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

diff程序中的-Naur是什么?

我已经看到,每当我们创建diff时,我们都使用以下命令.

diff -Naur old new > file.patch
Run Code Online (Sandbox Code Playgroud)

我想知道这个-Naur开关是什么.这个名字是如何产生的以及究竟是什么特别的呢?当然,我可以在没有Naur选项的情况下进行diff程序来发现差异.但是,我正在寻找更多有关它的信息.

linux diff

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

如何从git中的图形线知道分支名称?

我正在使用 Atlassian 的源代码树通过 git 存储库调试回归问题。我的问题是如何从 git 中的图形线中找出分支名称?我看到各种颜色,如棕色、蓝色和红色。我的问题是这些相应颜色线的分支名称是什么 -

这是图表——

在此处输入图片说明

git atlassian-sourcetree

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