标签: kernel

如何让内核在TCP套接字编程中选择范围(1024,5000)中的端口号

当我运行以下代码时:

struct   sockaddr_in sin;
int addrlen;   
addrlen=sizeof(sin);   
memset(&sin, 0, sizeof(sin));  
sin.sin_family = AF_INET;  
sin.sin_addr.s_addr=inet_addr("123.456.789.112");  
sin.sin_port=htons(0); // so that the kernel reserves a unique port for us  
sd_server = socket(PF_INET, SOCK_STREAM, 0);  
bind(sd_server, (struct sockaddr *) &sin, sizeof(sin));  
getsockname(sd_server,(struct sockaddr*)&sin,&addrlen);  
port=ntohs(sin.sin_port); 
printf("port number = %d\n",port);
Run Code Online (Sandbox Code Playgroud)

根据套接字,我必须得到1024到5000之间的端口号,但是我的端口号大约是30,000.
我该怎么办?

sockets kernel tcplistener tcpclient

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

Linux内核CONFIG_DEBUG_SECTION_MISMATCH会出错

在Linux内核编译的"make"步骤中,我遇到了很多这样的错误:

Building modules, stage 2.
MODPOST 2283 modules
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个make CONFIG_DEBUG_SECTION_MISMATCH=y并继续它,但我想知道是否有更好的方法来处理它.也许向别人报告或我如何解决这些问题,等等.

linux kernel

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

为什么在内核编程中使用u8 u32 u64 u64而不是unsigned int

我看到内核代码中使用的u8 u16 u64 u64数据类型.我想知道为什么会出现需要使用u8u16u32u64unsigned int

c linux kernel linux-device-driver

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

Jupyter Notebook 中的内核是什么?它与实际内核(与操作系统相关)有何不同/相似之处?

我在使用 Jupyter Notebook 时听到并看到了很多“内核”这个词。我只想知道“内核”在 Jupyter Notebook 中代表什么。它与我们在操作系统中使用的含义相同吗?如果它相似/不同,究竟如何?

两个内核都进行硬件交互吗?

内核(操作系统):https ://simple.m.wikipedia.org/wiki/Kernel_( computer_science)

内核(Jupyter Notebook) https://jupyter-client.readthedocs.io/en/stable/kernels.html

kernel jupyter-notebook jupyter-kernel

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

如何使用ioctl()来操作我的内核模块?

所以我正在尝试编写一个使用linux/timer.h文件的内核模块.我让它在模块内部工作,现在我试图让它从用户程序开始工作.

这是我的内核模块:

//Necessary Includes For Device Drivers.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <linux/timer.h>
#include <linux/ioctl.h>

#define DEVICE_NAME "mytimer"
#define DEVICE_FILE_NAME "mytimer"
#define MAJOR_NUM 61
#define MINOR_NUM 0

MODULE_LICENSE("Dual BSD/GPL");

static struct timer_list my_timer;

struct file_operations FileOps = 
{
    //No File Operations for this timer.
};

//Function to perform when timer expires.
void TimerExpire(int data)
{
    printk("Timer Data: %d\n", data);
}

//Function to set up timers.
void TimerSetup(void)
{
    setup_timer(&my_timer, TimerExpire, …
Run Code Online (Sandbox Code Playgroud)

linux kernel kernel-module linux-kernel gumstix

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

如何将不同进程的虚拟地址映射到不同的物理地址

我参加了一个关于操作系统设计和概念的课程,现在我正在努力学习Linux内核.我有一个我无法摆脱的问题.在现代操作系统中,每个进程都有自己的虚拟地址空间(VAS)(例如,在32位系统中为0到2 ^ 32-1).这提供了许多优点.但在实施中,我在某些方面感到困惑.让我通过举个例子来解释一下:

假设我们有两个过程p1,p2; p1和p2有自己的VAS.地址0x023f4a54映射到不同的物理地址(PA),它怎么可能?如何以这种方式完成此翻译.我的意思是我知道翻译机制,但我不明白,当它来到不同进程的地址空间时,相同的地址被映射到不同的物理地址.

0x023f4a54 in p1's VAS => PA 0x12321321
0x023f4a54 in p2's VAS => PA 0x23af2341 # (random addresses)
Run Code Online (Sandbox Code Playgroud)

kernel linux-kernel virtual-address-space

14
推荐指数
4
解决办法
6289
查看次数

当我从.NET生成一个新线程时到底发生了什么?

我想了解当我在.NET中生成一个新线程时,场景背后究竟发生了什么,如下所示:

Thread t = new Thread(DoWork); //I am not interested in DoWork per se
t.Start();
Run Code Online (Sandbox Code Playgroud)

1.在CLR和Windows内核中创建了哪些与线程相关的对象?
2.为什么需要这些物品?
3.在x86,x64 Windows上分配了多少托管/非托管内存(堆和堆栈)?

更新
我正在寻找托管线程对象这样的对象,我假设它是t,但也许是其他一些额外的托管对象; 内核线程对象,用户线程环境块等.

非常感谢!

.net memory windows multithreading kernel

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

linux调度程序是否需要进行上下文切换?

我有一个关于linux调度程序和一些其他类似的内核系统调用的一般性问题.

linux调度程序是否被视为"进程",并且对调度程序的每次调用都需要上下文切换,就像它只是另一个进程一样?

假设我们有一个时钟标记,它会中断当前正在运行的用户模式进程,现在我们必须调用调度程序.对调度程序本身的调用是否会引发上下文切换?调度程序是否有自己的一组寄存器和U区域以及每次调用时必须恢复的内容?

并且所述问题适用于许多其他系统调用.内核进程在上下文切换方面的行为类似于常规进程,唯一的区别是它们拥有更多权限并可以访问cpu吗?

我问这个是因为上下文切换开销很昂贵.调用调度程序本身会激发上下文切换以恢复调度程序状态听起来很奇怪,之后调度程序调用另一个进程来运行并再次调用另一个上下文切换.

linux kernel linux-kernel

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

为什么内核映射到与进程相同的地址空间

这是一个要详细阐述这个问题的问题:为什么内核被称为进程地址空间?

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

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

我可以获得有关linux(debian或ubuntu)特定操作系统的解释.

linux operating-system kernel memory-management

14
推荐指数
3
解决办法
9973
查看次数

我需要将std :: move移植到我的内核吗?

我担心在内核土地,我将无法访问之类的东西std::move,std::forward,std::initializer_list,等.虽然这些功能是内置到语言,他们仍然需要相应的头文件和库实现.以下是否足以利用移动语义,或者我是否需要完整的9码并移植C++库?

template <typename T>
typename remove_reference<T>::type&& move(T&& arg)
{
  return static_cast<typename remove_reference<T>::type&&>(arg);
}
Run Code Online (Sandbox Code Playgroud)

c++ kernel libstdc++ c++11

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