精华内容
下载资源
问答
  • linux 系统信息查询内存,闪存,cpu个数查询
    </pre><pre name="code" class="plain">

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/utsname.h>
    #include <sys/sysinfo.h>
    #include <sys/statfs.h>
    
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    
    using namespace std;
    
    
    
    </pre><pre name="code" class="cpp">//获取系统名称,类似shell命令  uname -a
    string getUname()
    {
        struct utsname u;
        uname(&u);
        char buf[256] = {0};
        sprintf(buf, "%s %s %s %s %s", u.sysname, u.nodename, u.release, u.version, u.machine);
        return string(buf);
    }
    
    
    
    //获取系统cpu个数
    unsigned int getCpuCoreNumber()
    {
        return sysconf(_SC_NPROCESSORS_CONF);
    }
    
    
    
    //获取使用的cpu个数
    unsigned int getCpuCoreUseage()
    {
        return sysconf(_SC_NPROCESSORS_ONLN);
    }
    
    
    
    
    
    unsigned int getPhyTotalPages()
    {
        return sysconf(_SC_PHYS_PAGES);
    }
    
    
    
    unsigned int getPhyAvailablePages()
    {
        return sysconf(_SC_AVPHYS_PAGES);
    }
    
    
    
    //获取系统名字
    string getHostname()
    {
        char host[32] = {0};
        gethostname(host, sizeof(host));
        return string(host);
    }
    
    
    
    //获取内存大小
    string getRamTotalSize()
    {
        struct sysinfo s_info;
        sysinfo(&s_info);
        char buf[100] = {0};
        sprintf(buf,"%luMB", s_info.totalram/1024/1024);
        return string(buf);
    }
    
    
    
    <pre name="code" class="cpp">//获取剩余内存大小
     
    
    string getRamAvailSize()
    {
        struct sysinfo s_info;
        sysinfo(&s_info);
        char buf[100] = {0};
        sprintf(buf,"%luMB", s_info.freeram/1024/1024);
        return string(buf);
    }
    
    
    
    //获取根目录挂载空间大小
    string getRomTotalSize()
    {
        struct statfs diskInof;
        statfs("/", &diskInof);
        unsigned long long blocksize = diskInof.f_bsize;
        unsigned long long totalsize = blocksize * diskInof.f_blocks;
    
    
        char buf[100] = {0};
        sprintf(buf, "%lluMB", totalsize / 1000 / 1000 );
        return string(buf);
    }
    
    
    
    //获取根目录可用空间
    string getRomAvailSize()
    {
        struct statfs diskInof;
        if (statfs("/", &diskInof) != 0)
        {
            return string("");
        }
        unsigned long long blocksize = diskInof.f_bsize;
        unsigned long long freeDisk = diskInof.f_bfree * blocksize;
        unsigned long long availableDisk = blocksize * diskInof.f_bavail;
    
    
        char buf[100] = {0};
        sprintf(buf, "%lluMB", availableDisk / 1000 / 1000 );
        return string(buf);
    }
    
    
    
    //获取sdcard 挂载空间大小,路径根据自己挂载目录指定
    string getSDcardTotalSize()
    {
        struct statfs diskInof;
        if (statfs("/media/mmcblk1", &diskInof) != 0)
        {
            return string("0MB");
        }
        unsigned long long blocksize = diskInof.f_bsize;
        unsigned long long totalsize = blocksize * diskInof.f_blocks;
    
    
        char buf[100] = {0};
        sprintf(buf, "%lluMB", totalsize / 1000 / 1000 );
        return string(buf);
    }
    
    
    
    //获取SD卡可用空间大小
    string getSDcardAvailSize()
    {
        struct statfs diskInof;
        if (statfs("/media/mmcblk1", &diskInof) != 0)
        {
            return string("0MB");
        }
        unsigned long long blocksize = diskInof.f_bsize;
        unsigned long long freeDisk = diskInof.f_bfree * blocksize;
        unsigned long long availableDisk = blocksize * diskInof.f_bavail;
    
    
        char buf[100] = {0};
        sprintf(buf, "%lluMB", availableDisk / 1000 / 1000 );
        return string(buf);
    }
    
    
    
    
    
    展开全文
  • [linux] 查看内存型号

    2020-01-04 20:41:54
    本文转载自:...最近想加内存,google了一下在linux查看内存型号的命令 $ sudo dmidecode -t memory # dmidecode 2.9 SMBIOS 2.4 present. H...
    本文转载自:
    https://www.cnblogs.com/bluefrog/archive/2012/07/25/2607993.html  作者:bluefrog 转载请注明该声明。
    

    最近想加内存,google了一下在linux查看内存型号的命令

    $ sudo dmidecode -t memory
    # dmidecode 2.9
    SMBIOS 2.4 present.
    
    Handle 0x000A, DMI type 16, 15 bytes
    Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: None
        Maximum Capacity: 4 GB
        Error Information Handle: No Error
        Number Of Devices: 2
    
    Handle 0x000B, DMI type 17, 27 bytes
    Memory Device
        Array Handle: 0x000A
        Error Information Handle: No Error
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 1024 MB
        Form Factor: SODIMM
        Set: None
        Locator: DIMM #1
        Bank Locator: Not Specified
        Type: DDR2
        Type Detail: Synchronous
        Speed: 800 MHz (1.2 ns)
        Manufacturer: A-Data Technology        
        Serial Number: 00000000
        Asset Tag: Not Specified
        Part Number: ADOVF1A083FE      
    
    Handle 0x000C, DMI type 17, 27 bytes
    Memory Device
        Array Handle: 0x000A
        Error Information Handle: No Error
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: SODIMM
        Set: None
        Locator: DIMM #2
        Bank Locator: Not Specified
        Type: DDR2
        Type Detail: Synchronous
        Speed: 800 MHz (1.2 ns)
        Manufacturer: A-Data Technology        
        Serial Number: 00000000
        Asset Tag: Not Specified
        Part Number: ADOVF1B163G2G     
    展开全文
  • Linux 内存

    2012-01-04 19:14:47
    Linux 内存  在 Linux 中,用户内存和内核内存是独立的,在各自的地址空间实现。地址空间是虚拟的,就是说地址是从物理内存中抽象出来的(通过一个简短描述的过程)。由于地址空间是虚拟的,所以可以存在很多。...
      
    

    Linux 内存

      在 Linux 中,用户内存和内核内存是独立的,在各自的地址空间实现。地址空间是虚拟的,就是说地址是从物理内存中抽象出来的(通过一个简短描述的过程)。由于地址空间是虚拟的,所以可以存在很多。事实上,内核本身驻留在一个地址空间中,每个进程驻留在自己的地址空间。这些地址空间由虚拟内存地址组成,允许一些带有独立地址空间的进程指向一个相对较小的物理地址空间(在机器的物理内存中)。不仅仅是方便,而且更安全。因为每个地址空间是独立且隔离的,因此很安全。

      但是与安全性相关联的成本很高。因为每个进程(和内核)会有相同地址指向不同的物理内存区域,不可能立即共享内存。幸运的是,有一些解决方案。用户进程可以通过 Portable Operating System Interface for UNIX® (POSIX) 共享的内存机制(shmem)共享内存,但有一点要说明,每个进程可能有一个指向相同物理内存区域的不同虚拟地址。

      虚拟内存到物理内存的映射通过页表完成,这是在底层软件中实现的(见图 1)。硬件本身提供映射,但是内核管理表及其配置。注意这里的显示,进程可能有一个大的地址空间,但是很少见,就是说小的地址空间的区域(页面)通过页表指向物理内存。这允许进程仅为随时需要的网页指定大的地址空间。

    图 1. 页表提供从虚拟地址到物理地址的映射

      由于缺乏为进程定义内存的能力,底层物理内存被过度使用。通过一个称为 paging(然而,在 Linux 中通常称为 swap)的进程,很少使用的页面将自动移到一个速度较慢的存储设备(比如磁盘),来容纳需要被访问的其它页面(见图 2 )。这一行为允许,在将很少使用的页面迁移到磁盘来提高物理内存使用的同时,计算机中的物理内存为应用程序更容易需要的页面提供服务。注意,一些页面可以指向文件,在这种情况下,如果页面是脏(dirty)的,数据将被冲洗,如果页面是干净的(clean),直接丢掉。

    图 2. 通过将很少使用的页面迁移到速度慢且便宜的存储器,交换使物理内存空间得到了更好的利用

      MMU-less 架构

      不是所有的处理器都有 MMU。因此,uClinux 发行版(微控制器 Linux)支持操作的一个地址空间。该架构缺乏 MMU 提供的保护,但是允许 Linux 运行另一类处理器。

      选择一个页面来交换存储的过程被称为一个页面置换算法,可以通过使用许多算法(至少是最近使用的)来实现。该进程在请求存储位置时发生,存储位置的页面不在存储器中(在存储器管理单元 [MMU] 中无映射)。这个事件被称为一个页面错误 并被硬件(MMU)删除,出现页面错误中断后该事件由防火墙管理。该栈的详细说明见 图 3。

      Linux 提供一个有趣的交换实现,该实现提供许多有用的特性。Linux 交换系统允许创建和使用多个交换分区和优先权,这支持存储设备上的交换层次结构,这些存储设备提供不同的性能参数(例如,固态磁盘 [SSD] 上的一级交换和速度较慢的存储设备上的较大的二级交换)。为 SSD 交换附加一个更高的优先级使其可以使用直至耗尽;直到那时,页面才能被写入优先级较低的交换分区。

    图 3. 地址空间和虚拟 - 物理地址映射的元素

      并不是所有的页面都适合交换。考虑到响应中断的内核代码或者管理页表和交换逻辑的代码,显然,这些页面决不能被换出,因此它们是固定的,或者是永久地驻留在内存中。尽管内核页面不需要进行交换,然而用户页面需要,但是它们可以被固定,通过 mlock(或 mlockall)函数来锁定页面。这就是用户空间内存访问函数的目的。如果内核假设一个用户传递的地址是有效的且是可访问的,最终可能会出现内核严重错误(kernel panic)(例如,因为用户页面被换出,而导致内核中的页面错误)。该应用程序编程接口(API)确保这些边界情况被妥善处理。

      内核 API

      现在,让我们来研究一下用户操作用户内存的内核 API。请注意,这涉及内核和用户空间接口,而下一部分将研究其他的一些内存 API。用户空间内存访问函数在表 1 中列出。

    表 1. 用户空间内存访问 API

    函数描述
    access_ok检查用户空间内存指针的有效性
    get_user从用户空间获取一个简单变量
    put_user输入一个简单变量到用户空间
    clear_user清除用户空间中的一个块,或者将其归零。
    copy_to_user将一个数据块从内核复制到用户空间
    copy_from_user将一个数据块从用户空间复制到内核
    strnlen_user获取内存空间中字符串缓冲区的大小
    strncpy_from_user从用户空间复制一个字符串到内核

      正如您所期望的,这些函数的实现架构是独立的。例如在 x86 架构中,您可以使用 ./linux/arch/x86/lib/usercopy_32.c 和 usercopy_64.c 中的源代码找到这些函数以及在 ./linux/arch/x86/include/asm/uaccess.h 中定义的字符串。

      当数据移动函数的规则涉及到复制调用的类型时(简单 VS. ***),这些函数的作用如图 4 所示。

    图 4. 使用 User Space Memory Access API 进行数据移动

      access_ok 函数

      您可以使用 access_ok 函数在您想要访问的用户空间检查指针的有效性。调用函数提供指向数据块的开始的指针、块大小和访问类型(无论这个区域是用来读还是写的)。函数原型定义如下:

    access_ok( type, addr, size ); 

      type 参数可以被指定为 VERIFY_READ 或 VERIFY_WRITE。VERIFY_WRITE 也可以识别内存区域是否可读以及可写(尽管访问仍然会生成 -EFAULT)。该函数简单检查地址可能是在用户空间,而不是内核。

      get_user 函数

      要从用户空间读取一个简单变量,可以使用 get_user 函数,该函数适用于简单数据类型,比如,char 和 int,但是像结构体这类较大的数据类型,必须使用 copy_from_user 函数。该原型接受一个变量(存储数据)和一个用户空间地址来进行 Read 操作:

    get_user( x, ptr ); 

      get_user 函数将映射到两个内部函数其中的一个。在系统内部,这个函数决定被访问变量的大小(根据提供的变量存储结果)并通过 __get_user_x 形成一个内部调用。成功时该函数返回 0,一般情况下,get_user 和 put_user 函数比它们的块复制副本要快一些,如果是小类型被移动的话,应该用它们。

      put_user 函数

      您可以使用 put_user 函数来将一个简单变量从内核写入用户空间。和 get_user 一样,它接受一个变量(包含要写的值)和一个用户空间地址作为写目标:

    put_user( x, ptr ); 

      和 get_user 一样,put_user 函数被内部映射到 put_user_x 函数,成功时,返回 0,出现错误时,返回 -EFAULT。

      clear_user 函数

      clear_user 函数被用于将用户空间的内存块清零。该函数采用一个指针(用户空间中)和一个型号进行清零,这是以字节定义的:

    clear_user( ptr, n ); 

      在内部,clear_user 函数首先检查用户空间指针是否可写(通过 access_ok),然后调用内部函数(通过内联组装方式编码)来执行 Clear 操作。使用带有 repeat 前缀的字符串指令将该函数优化成一个非常紧密的循环。它将返回不可清除的字节数,如果操作成功,则返回 0。

      copy_to_user 函数

      copy_to_user 函数将数据块从内核复制到用户空间。该函数接受一个指向用户空间缓冲区的指针、一个指向内存缓冲区的指针、以及一个以字节定义的长度。

    该函数在成功时,返回 0,否则返回一个非零数,指出不能发送的字节数。

    copy_to_user( to, from, n ); 

      检查了向用户缓冲区写入的功能之后(通过 access_ok),内部函数 __copy_to_user 被调用,它反过来调用 __copy_from_user_inatomic(在 ./linux/arch/x86/include/asm/uaccess_XX.h 中。其中 XX 是 32 或者 64 ,具体取决于架构。)在确定了是否执行 1、2 或 4 字节复制之后,该函数调用 __copy_to_user_ll,这就是实际工作进行的地方。在损坏的硬件中(在 i486 之前,WP 位在管理模式下不可用),页表可以随时替换,需要将想要的页面固定到内存,使它们在处理时不被换出。i486 之后,该过程只不过是一个优化的副本。

      copy_from_user 函数

      copy_from_user 函数将数据块从用户空间复制到内核缓冲区。它接受一个目的缓冲区(在内核空间)、一个源缓冲区(从用户空间)和一个以字节定义的长度。和 copy_to_user 一样,该函数在成功时,返回 0 ,否则返回一个非零数,指出不能复制的字节数。

    copy_from_user( to, from, n ); 

      该函数首先检查从用户空间源缓冲区读取的能力(通过 access_ok),然后调用 __copy_from_user,最后调用 __copy_from_user_ll。从此开始,根据构架,为执行从用户缓冲区到内核缓冲区的零拷贝(不可用字节)而进行一个调用。优化组装函数包含管理功能。

      strnlen_user 函数

      strnlen_user 函数也能像 strnlen 那样使用,但前提是缓冲区在用户空间可用。strnlen_user 函数带有两个参数:用户空间缓冲区地址和要检查的最大长度。

    strnlen_user( src, n ); 

      strnlen_user 函数首先通过调用 access_ok 检查用户缓冲区是否可读。如果是 strlen 函数被调用,max length 参数则被忽略。

      strncpy_from_user 函数

      strncpy_from_user 函数将一个字符串从用户空间复制到一个内核缓冲区,给定一个用户空间源地址和最大长度。

    strncpy_from_user( dest, src, n ); 

      由于从用户空间复制,该函数首先使用 access_ok 检查缓冲区是否可读。和 copy_from_user 一样,该函数作为一个优化组装函数(在 ./linux/arch/x86/lib/usercopy_XX.c 中)实现。

      内存映射的其他模式

      上面部分探讨了在内核和用户空间之间移动数据的方法(使用内核初始化操作)。Linux 还提供一些其他的方法,用于在内核和用户空间中移动数据。尽管这些方法未必能够提供与用户空间内存访问函数相同的功能,但是它们在地址空间之间映射内存的功能是相似的。

      在用户空间,注意,由于用户进程出现在单独的地址空间,在它们之间移动数据必须经过某种进程间通信机制。Linux 提供各种模式(比如,消息队列),但是最著名的是 POSIX 共享内存(shmem)。该机制允许进程创建一个内存区域,然后同一个或多个进程共享该区域。注意,每个进程可能在其各自的地址空间中映射共享内存区域到不同地址。因此需要相对的寻址偏移(offset addressing)。

      mmap 函数允许一个用户空间应用程序在虚拟地址空间中创建一个映射,该功能在某个设备驱动程序类中是常见的,允许将物理设备内存映射到进程的虚拟地址空间。在一个驱动程序中,mmap 函数通过 remap_pfn_range 内核函数实现,它提供设备内存到用户地址空间的线性映射。

      结束语

      本文讨论了 Linux 中的内存管理主题,然后讨论了使用这些概念的用户空间内存访问函数。在用户空间和内核空间之间移动数据并没有表面上看起来那么简单,但是 Linux 包含一个简单的 API 集合,跨平台为您管理这个复杂的任务。

    展开全文
  • 文章目录Linux Shell CentOS 查看Linux 内存 相关信息1、代码2、结果 Linux Shell CentOS 查看Linux 内存 相关信息 1、代码 prt "内存总量 KB" grep MemTotal /proc/meminfo prt "内存总量 MB" free -m | grep "Mem...
    展开全文
  • 还不是因为我的笔记本内存只有16G,想再买一条扩展但是又不知道已安装的是不是双内存,故出此教程! 1、准备工作 Linux操作系统(这不是废话吗) dmidecode(可能自带,可能要自己安装) 2、工具安装 2.1、yum ...
  • 不过这里有一个很重要的共性前提,需要清楚了解当前硬件所匹配的内存大小型号和插槽数量等依赖关系,接下来是小编为大家收集的Linux查看内存大小和插槽,欢迎大家阅读:Linux查看内存大小和插槽实践过程Linux 查看...
  • @Linux下查看内存型号、主板、硬盘等等 首先查看是否安装了dmidecode工具 [root@algerfan ~]# dmidecode Linux 查看内存的插槽数,已经使用多少插槽.每条内存多大: [root@algerfan ~]# dmidecode|grep -A5 ...
  • Tips:使用的内存型号建议一致,这样兼容性会好一些。 介绍:第一块介绍的是主板Array情况,单个接口最大64G,总共4个接口;第二块介绍的是Memory device的情况,我的电脑上的8G内存条插在Handle 0x0048,dd4类型...
  • 不依赖于proc文件系统的情况下查询系统当前内存和flash使用情况
  • Linux 查询cpu,内存和磁盘信息 #查询操作系统 $cat /proc/version Linux version 4.18.0-147.8.1.el7.aarch64 #查询linux系统 $cat /etc/redhat-release CentOS Linux release 7.8.2003 (AltArch) #查询CPU信息 $...
  • Linux内存管理

    千次阅读 2015-08-28 17:05:08
    Linux操作系统内存管理和虚拟内存概念;为内核开发做一个基础铺垫。 1.物理地址: 物理地址是指出现在cpu外部的地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。 2.逻辑地址: 程序代码经过编译...
  • CENTOS LINUX查询内存大小、频率

    千次阅读 2016-12-21 09:44:26
    more /proc/meminfo ...linux下查看主板内存槽与内存信息 1、查看内存槽数、那个槽位插了内存,大小是多少 dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 2、查看最大支持内存数 dmi
  • linux 内存管理

    千次阅读 2012-08-27 10:47:44
    内存 目 录 内存 内存管理子系统导读from aka用户态内核页目录的初始化内核线程页目录的借用用户进程内核页目录的建立内核页目录的同步mlock代码分析memory.c copy_pageclear_page_...
  • Linux 内存管理

    千次阅读 2011-09-21 16:32:10
    内存 目 录 内存 内存管理子系统导读from aka用户态内核页目录的初始化内核线程页目录的借用用户进程内核页目录的建立内核页目录的同步mlock代码分析memory.c copy_pageclear_page_...
  • Linux内存管理之综合篇

    千次阅读 2016-03-25 16:48:51
    2.6 Linux 内核使用了许多技术来改进对大量内存的使用,使得 Linux 比以往任何时候都更适用于企业。本文列出了一些更重要的改变,包括反向映射(reverse mapping)、使用更大的内存页、页表条目存储在高端内存中,...
  • 测试环境:Dell服务器CentOS 6.4主要使用到的命令:dmidecode、cat、megaCli64、df查询服务器型号:dmidecode -t 1查询主板信息:dmidecode -t 2查询CPU信息:查看CPU型号cat /proc/cpuinfo | grep name | cut -f2 -...
  • 今天小编就为大家分享一篇关于Linux系统查看CPU、机器型号内存等信息,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • linux如何查看CPU_内存_机器型号_网卡信息.docx
  • 安装工具dmidecode 使用 1.查看内存槽及内存条 $ sudo dmidecode -t memory 2.查看内存的插槽数,已经使用...3.查看服务器型号、序列号 $ sudo dmidecode | grep "System Information" -A9 | egrep ...
  • # dmidecode -t memory# dmidecode 2.9SMBIOS 2.4 present.Handle 0x1000, DMI type 16, 15 bytesPhysical Memory ArrayLocation: System Board Or MotherboardUse: System MemoryError Correction Type: Multi-bit ...
  • 查询磁盘总容量命令: df -h |awk '{print $2}'|awk '/M/ {print $0*0.001};/G/ {print $0*1};/T/ {print $0*1000}'|awk '{sum += $1} END {print sum}'|awk '{print $0"G"}' 查询磁盘剩余容量命令: df -h |awk '...
  • 目录 一、前言 二、关于服务器基本配置 2.1操作系统基本配置...查询服务器的基本配置一般查询操作系统,CPU,内存,硬盘,下面进行逐一讲解。 2.1操作系统基本配置查询 查看操作系统版本 #cat /etc/redhat-re
  • 1 查看CPU1.1 查看CPU个数# cat /proc/cpuinfo | grep "physical id" | uniq...wc –l命令:统计行数**1.2 查看CPU核数# cat /proc/cpuinfo | grep "cpu cores" | uniqcpu cores : 41.3 查看CPU型号# cat /proc/cpui...
  • Linux下查看CPU型号,内存大小,硬盘空间的命令(详解) 1 查看CPU 1.1 查看CPU个数 cat /proc/cpuinfo | grep “physical id” | uniq | wc -l 2 uniq命令:删除重复行;wc –l命令:统计行数 1.2 查看CPU核数 cat /proc...
  • linux 内存、内核、版本查看命令内存1、free 查看内容使用情况 (可以加m 转化为Mb h 转化为Gb)totalusedfreesharedbufferscachedMemSwap表示物理 内存总量表示总计分配给缓存(包含buffers 与cache )使用的数量,...
  • linux查询内存、CPU、硬盘等系统信息的命令转载wdy1986222016-02-03 11:21:15评论(0)93人阅读一、linux CPU大小[root@idc ~]# cat /proc/cpuinfo |grep "model name" &amp;&amp; cat/proc/cpuinfo...
  • linux如何查看CPU,内存,机器型号,网卡信息,linux 查看 占用 内存 最多的 进程 

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,827
精华内容 10,730
关键字:

linux内存型号查询

linux 订阅