Tag: 操作系统

谁决定了角色的排序

我有一个基于以下程序的查询 – char ch; ch = ‘z’; while(ch >= ‘a’) { printf(“char is %c and the value is %d\n”, ch, ch); ch = ch-1; } 为什么在上述程序中不能保证打印整套小写字母。 如果C对内部forms的字符排序没有多少保证,那么实际上是谁以及如何做?

何时将文件加载到内存中 – 对于fread,fopen和fwrite调用?

当我执行fopen然后fread时,fopen或fread期间文件实际/部分加载到内存中的时间是什么时候? 或者它是基于文件大小在fopen部分加载,然后在fread时满载? 类似地,当调用fwrite时,操作系统级别内部会发生什么? 此时文件是否已加载到内存中,或者页面交换是否正在重新检索内存中的那部分文件? 关于内存中的文件加载,在每个调用的操作系统级别会发生什么?

在程序结束后没有释放的内存会发生什么?

重复 : 当你在malloc之后没有释放时真正发生了什么? 比方说,例如: int main() { char* test = new char[50000]; return 0; } 程序完成后分配的内存会发生什么变化? 是否立即获得其他应用程序的释放? 或者也许过了一段时间? 或许它永远丢失在系统中? 或者它是否被交换到磁盘永远不会返回到RAM? 或者也许完全不同的东西? 我想知道主要3操作系统会发生什么:Windows(XP及以上,如果有任何差异),Linux,Mac OS X.

在C中printf背后的是什么?

可能重复: 了解printf的硬件 我不是在寻找printf函数的实现,但是我想知道,当用C printf调用printf时会发生什么? 所有活动都在软件和硬件级别进行。 这就是我认为PrintfCAll – > KernelModeOn – > SystemCallMade – >数据放在某些排序的输出缓冲区 – >输出被转储到某些控制器的缓冲区 – >控制器将其转储到监视器 – >中断CPU说工作已完成。 我有多正确? 谢谢。 编辑:Unix可以作为一个平台。 说ubuntu。 有人可以告诉我,数据从何处流出,是否还有监视器的控制器? 上面提到的时间表在多大程度上是正确的?

使用这些fork()语句创建了多少个进程?

我相信这创造了24个过程; 但是,我需要validation。 这些问题经常让我感到困惑。 谢谢您的帮助! #include #include #include int main(void) { pid_t pid = fork(); pid = fork(); pid = fork(); if (pid == 0) { fork(); } fork(); return 0; }

C中的multithreading服务器/客户端实现

我刚开始学习基本的网络概念。我正在尝试在C中实现multithreading服务器 – 客户端程序。但问题是不是为客户端运行多个windows / terminal / instance,我应该使用fork()来创建客户端的子项.so通过创建客户端的子节点,将创建多个客户端。现在,每个子客户端都将在线程上与服务器通信。 之前我创建了类似的编程,但是对于多个客户端,您必须为客户端打开多个窗口并运行所有这些窗口。 我无法修改我的代码(在服务器和客户端的代码。我认为服务器一个是好的。但我不知道在客户端程序中fork()的位置以及应该进行哪些更改)。 实际上我不想打开多个窗口来运行多个客户端,这就是为什么我使用fork()创建它的多个副本。是否有任何其他方式我可以创建多个客户端并将它们连接到我的服务器prog线程。 服务器: // socket server example, handles multiple clients using threads #include #include //strlen #include //strlen #include #include //inet_addr #include //write #include //for threading , link with lpthread //the thread function void *connection_handler(void *); int main(int argc , char *argv[]) { int socket_desc , client_sock , […]

编译器如何为变量分配内存地址?

我教一门课程让学生们提出有关编程的问题(!):我有这个问题: 机器为什么选择变量进入内存? 我们可以告诉它存储变量的位置吗? 我真的不知道该说些什么。 这是我的第一次尝试: 编译器(不是机器)自动选择将变量存储在进程地址空间的位置。 使用C,我们无法告诉机器存储变量的位置。 但是“自动”有点虎头蛇尾并且引发了一个问题…而且我已经意识到我甚至不知道它是编译器,运行时或操作系统还是谁来完成任务。 也许有人能比我更好地回答学生的问题。

将&符号应用于C / C ++或任何其他此类语言的变量或数据类型时返回的是什么类型的地址?

从我听说OS类中的虚拟和物理内存概念这一天起,这是一个非常基本的问题令人难以置信。 现在我知道在加载时和编译时,虚拟地址和逻辑地址绑定方案是相同的,但在执行时它们是不同的。 首先,为什么在编译和加载时生成虚拟地址以及在我们应用&号运算符来获取变量,天真数据类型,用户定义类型和函数定义地址的地址时返回什么是有益的? 操作系统如何完全从虚拟地址映射到物理地址? 这些问题都是出于好奇心而且我会喜欢考虑现代操作系统的一些好的和深刻的见解’,早期的操作系统是怎样的’。我只是特定于C / C ++,因为我对其他语言知之甚少。

为什么sizeof(int)在不同的操作系统中有所不同?

我想知道为什么int的大小取决于C&C ++中使用的操作系统。 如果指针的大小变化,但为什么整数的大小。 如果16位OS sizeof(int)= 2字节,则32位sizeof(int)= 4字节。 为什么这样? 谢谢。

直接打印到文本video内存时出现意外输出

我正在用C开发一个内核,并在屏幕上创建了一些可以在video内存上打印的内容。 我预计video内存中的第一个字节将是要打印的字符,第二个字节会告诉颜色。 但我的程序有一些不同,但它的工作原理! 这是非常意外和不寻常的。 我的内核代码 – #define VIDEO_MEM 0xb8000 void write_string( int colour, const unsigned char *string ); void main() { unsigned char *vid = (unsigned char*) VIDEO_MEM; int i=0; for (i = 0; i < 2000; i++) { *vid = ' '; *(vid+2) = 0x1f; vid += 2; } write_string(0x1f,"The Kernel has been loaded […]