首页 文章
  • 37 votes
     answers
     views

    为什么“可执行文件”操作系统依赖?

    我知道每个CPU /架构都有自己的指令集,因此为特定CPU编写的程序(二进制)不能在另一个CPU上运行 . 但我真正理解的是为什么一个可执行文件(例如.exe这样的二进制文件)无法在Linux上运行,但即使在同一台机器上也可以在Windows上运行 . 这是一个基本问题,我期待的答案是.exe和其他二进制格式可能不是原始机器指令,但它们包含一些依赖于操作系统的数据 . 如果这是真的,那么这个OS依...
  • 17 votes
     answers
     views

    为什么Windows,Linux等汇编语言之间存在差异?

    我对所有这些低级别的东西,汇编语言相对较新 . 并且想要了解更多细节 . 为什么Linux,Windows汇编语言之间存在差异? 据我所知,当我编译C代码时,操作系统并不真正生成纯机器或汇编代码,它会生成依赖于操作系统的二进制代码 . 但为什么呢? 例如,当我使用x86系统时,CPU只能理解x86 ASM我是对的吗? . 为什么我们不编写纯x86汇编代码以及为什么基于操作系统有不同的汇编变体?如果...
  • 0 votes
     answers
     views

    非常基本的编译问题 - 请帮忙!

    (1)在底线:为了使程序在特定操作系统上可执行,它需要采取什么措施?机器码,汇编语言? (2)是否必须是机器可读的才能由某种CPU执行? (3)程序执行时操作系统会起什么作用?它与帮助系统解释程序代码有什么关系吗? (4)根据Windows PC,所有程序都必须是.exe才能执行?为什么选择Java虚拟机? (5)反编译器如何工作?编译为机器代码和汇编语言的程序有什么区别? 非常感谢!!
  • 97 votes
     answers
     views

    如何在Python中检查操作系统?

    我想检查操作系统(在脚本运行的计算机上) . 我知道我可以在Linux中使用 os.system('uname -o') ,但它在控制台中给我一条消息,我想写一个变量 . 如果脚本可以判断它是Mac,Windows还是Linux,那也没关系 . 我怎么检查呢?
  • 0 votes
     answers
     views

    为什么这个C代码适用于Linux而不适用于没有cygwin的Windows

    我有一个C代码 . #include <stdio.h> #include <time.h> #include <unistd.h> int main() { int a = 1; while( a <= 5 ) { time_t t = time(NULL); struct tm tm = *localtime(...
  • 3 votes
     answers
     views

    vxworks中的任务

    当我们执行taskSpawn时,任务正在vxworks中创建 . 什么是实际任务 . 与线程有任何关系吗? 在我的理解中,vxworks是基于线程的操作系统 . 有人可以帮助我真实场景中任务/线程/进程之间的真正区别 . 在某处,我看到任务是执行一组指令 . 如果是这样,那么线程也有一些指令集,所以我们可以将线程称为任务 . 请帮忙
  • 0 votes
     answers
     views

    如何排出java线程堆栈内存区域?

    在C中,我可以通过以下小程序消耗堆栈内存区域(我的Mac中的堆栈大小限制为8MB) int main(int argc, const char **argv) { int a[1024*1024*2]; long size = sizeof(a); return 0; } 由于数组java也是一个对象,因此它的元素存储在堆中 . 根据Oracle's doc,Mac中的默认线程堆栈大...
  • 1 votes
     answers
     views

    无法将平面二进制文件加载到内核中

    注意 - 我还没有设置分页,我的内核是多引导,ELF . 我确实有irqs和isrs完成 . 所以我在这里有这个GAS文件: .section .text .global _start _start: mov $0xDEADBEEF, %eax 并且GRUB2设置加载平面二进制文件: menuentry "fOS-Terminal (25x80)" { mu...
  • 2 votes
     answers
     views

    程序集x86 qemu:致命:尝试在RAM或ROM之外执行代码

    我正在开发一个非常基本的shell,其中唯一的命令是'help' . 如果输入错误,则会通知您该命令未被识别 . 在段和堆栈设置的某处我有一个错误,导致shell在输入任何内容之后吐出一些废话,然后完全冻结 . 错误我进入终端 qemu: fatal: Trying to execute code outside RAM or ROM at 0xff0fe990 EAX=0000ffe0 EBX=...
  • 3 votes
     answers
     views

    处理器如何知道指令正在进行系统调用

    系统调用 - 它是一条指令,它产生一个中断,使OS获得对处理器的控制 . 因此,如果正在运行的进程发出系统调用(例如创建/终止/读/写等),则会产生一个中断,该中断会导致处理器的KERNEL TAKE CONTROL,然后处理器执行所需的中断处理程序 . 正确? 然后任何人都可以告诉我处理器如何知道该指令应该阻止进程,进入特权模式,并带来内核代码 . 我的意思是作为程序员我只需键入stream1 ...
  • 0 votes
     answers
     views

    处理器如何知道指令是否来自内核?

    仅当指令来自内核时,处理器才执行某些指令 . 处理器如何知道指令是否来自内核?我认为在RAM中有两个不同的内存位置:一个用于用户模式,一个用于内核模式 . 但我认为那不是真的 .
  • 0 votes
     answers
     views

    如何使用管道发送动态分配的字符串

    我有一个功课,我需要使用管道在进程之间发送一串字符串 . 当我使用管道从子进程发送 string which is created compile time 到主进程时,它被成功发送 . 这是我在主要和子进程中所做的 . 儿童过程: char* str ="from child"; int lengthOfString=strlen(str)+1;//+1 for nu...
  • 1 votes
     answers
     views

    从execv返回错误启动终端(sh):/ bin / sh:/ bin / sh:无法执行二进制文件

    我正在尝试执行命令sh,从ac程序启动Linux中的新终端,但我得到此错误/ bin / sh:/ bin / sh:当我使用execv()时,无法执行二进制文件和fork相同的结果然后execv . 但当我尝试系统命令成功时,我怎么能用execv执行此命令? 工作的: int main (){ system("sh"); return 0; }...
  • 0 votes
     answers
     views

    处理P0打印“0”的次数是多少?

    以下程序由3个并发进程和3个二进制信号量组成 . 信号量初始化为S0 = 1 S1 = 0 S2 = 0 过程P0: while(1) { wait (S0); print '0'; release (S1); release (S2); } 流程P1: wait(S1); release (S0); 过程P2: wait(S2); release (S0); 处理PO打印'0“的次数是多少...
  • 1 votes
     answers
     views

    二进制信号量如何进行?

    出现以下问题时,我正在研究二进制信号量: 假设有3个并发进程和3个二进制信号量......信号量被初始化为S0 = 1,S1 = 0,S2 = 0 . 这些过程具有以下代码: Process P0: Process P1: Process P2: while (true){ wait(...
  • 0 votes
     answers
     views

    在执行期间,可以在不同信号量上的两个独立线程执行的两个等待操作是否交错?

    约翰·米切尔(John C. Mitchell)对“编程语言中的概念”中的这种引用感激不已: “原子性阻止一个等待过程的单个语句与同一个信号量上的另一个等待的单个语句交错 . ” 等待和信号操作需要是原子的,这通常是由一些“低级”获取锁定的机制强制执行 - 禁用中断,禁用抢占,测试和设置......但是,从概念上讲,这些锁如何以某种方式“私有”对于每个信号量实例? 换句话说,是否允许例如一个线...
  • 1 votes
     answers
     views

    fork调用后的地址空间

    当进程执行fork()sys调用时,会从中生成子进程 . fork()调用之后的所有代码都被复制到内存的新物理页面,即帧 . 我无法可视化子进程的虚拟内存部分 . 因为在下面的代码中,char变量的地址在child和parent中是相同的 . #include <stdio.h> #include <sys/types.h> int main(void) { p...
  • 66 votes
     answers
     views

    开发操作系统的资源[关闭]

    我打算编写一个操作系统,我对操作系统知之甚少 . 是否有任何好的资源或书籍可供我学习?你有什么建议?
  • 0 votes
     answers
     views

    使用Nagios监控CPU负载,系统性能和僵尸

    我最近安装了nagios来监控几个远程系统...远程系统延迟如下 . icmp_seq=1 ttl=52 time=254 ms 我已经配置了nagios来监控CPU负载,Total Processes和Zombie进程 . 它确实向我发送了所有系统远程的电子邮件..但是在附加信息中它指定了此消息 (Return code of 255 is out of bounds) 由于这只是一个额外的消...
  • 1 votes
     answers
     views

    TLB Hit - 检查页面是否在进程的内存空间内

    我一直在阅读有关虚拟地址到物理地址的转换 . 据我所知,TLB是一个硬件缓存,驻留在CPU的内存管理单元中,包含最近访问过的页面的映射 . 但是,有一个TLB命中 - 操作系统如何确保进程实际访问页面(在进程的分配地址空间内)? 我相信这样做的一种方法是检查进程的页表,但这似乎打败了使用TLB的整个目的 . 任何见解?
  • 0 votes
     answers
     views

    MMU和TLB错过了

    假设如下 . 我有一个虚拟内存系统,一个杠杆分页,我有一个MMU,TLB的东西是由软件控制的 . 好吧..所以想象一下我是一个进程,我想在虚拟地址vaddr的RAM中读一个字 . 因此,CPU给出MMU vaddr,MMU检查TLB是否存在具有(假设)vaddr的5个最高有效位的条目 . 如果它在那里......一切正常,它计算物理地址,一切顺利 . 现在..假设它不在TLB中 . 在这种情况下,...
  • 0 votes
     answers
     views

    缓存和TLB命中率之间的关系

    以下是对操作系统(Gate 2003 OS)的MMU的描述: 处理器使用2级页表进行虚拟到物理地址转换 . 两个级别的页表存储在主存储器中 . 虚拟和物理地址都是32位宽 . 内存是字节可寻址的 . 对于虚拟到物理地址转换,虚拟地址的10个最高有效位用作第一级页表的索引,而接下来的10位用作第二级页表的索引 . 虚拟地址的12个最低有效位用作页面内的偏移量 . 假设两个页面级别中的页表条目是4个...
  • 1 votes
     answers
     views

    TLB转换与缓存

    我对操作系统中的内存管理存有疑问 . 我知道缓存是用于加速内存访问的临时存储位置,而TLB用于加速从虚拟地址到物理地址的转换 . 现在,如果生成虚拟内存地址,采取的第一步是什么? 如果第一步是指TLB并生成物理地址,那么第二步是什么?(它是指缓存以查看该数据是否存储在缓存中)? 现代计算机使用TLB吗? cpu如何知道页表所在的位置?
  • 0 votes
     answers
     views

    地址间隔标识符(ASID)的用途

    我目前正在学习A Silberschatz,P Galvin,G Gagne的操作系统 . 我正在研究内存管理策略,以及它们引入转换后备缓冲区(TLB)的部分 . 某些TLB在每个TLB条目中存储地址空间标识符(ASID) . ASID唯一标识每个进程,并用于为该进程提供地址空间保护 . 当TLB尝试解析虚拟页码时,它确保当前正在运行的进程的ASID与与虚拟页面关联的ASID匹配 . 如果AS...
  • 0 votes
     answers
     views

    使用TLB未命中将虚拟地址转换为物理地址

    假设您有一个64位系统,并且您的操作系统正在其上安排两个进程 . 假设核心可以访问4个入口的TLB,页面大小为4KB,并且具有完全关联性 . 此外,假设核心具有64字节的直接映射高速缓存,具有16字节高速缓存行 . 现在假设您的流程A和B具有以下页表: Process A Page Table 现在假设您的操作系统调度进程A,并在其中生成对以下虚拟地址的内存引用 . 0x2002 对于上面提供的内...
  • 2 votes
     answers
     views

    了解linux内核中的优先级数组

    我试图了解Linux内核的调度程序是如何工作的 正如此链接所示 http://books.google.co.in/books?id=NXVkcCjPblcC&lpg=PP1&pg=PA47#v=onepage&q&f=false以下链接http://www.informit.com/articles/article.aspx?p=101760&seqNum...
  • 0 votes
     answers
     views

    ps命令中的静态和动态优先级字段

    我的问题是关于Linux CPU调度算法 . 根据我的理解,传统流程具有静态和动态优先级以及 nice 值 . 静态优先级为 120+nice . 基于此,计算分配给过程的量子 . 然后根据其行为重新计算进程的优先级 . 调度程序根据其动态优先级值选择进程 . 这是否意味着,流程会改变其队列?如果是这样,为什么分配给流程的CPU量取决于其静态优先级而不是动态值? ps 命令可以返回如下内容: ~...
  • 2 votes
     answers
     views

    在父项中有退出(0)时无法理解fork()的输出

    当我在程序下面运行时: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> //multiple children of the same parent void main(){ int pid,i; for(i=0;i&l...
  • 1 votes
     answers
     views

    编译器 - 平台差异

    如果编译器将源代码转换为特定处理器的机器代码(二进制)(比如说英特尔),为什么我们需要一个用于linux的编译器和一个不同的Windows编译器,这两个操作系统都有相同的处理器?为什么编译器平台依赖? 为什么't i run the binary compiled file (let'在没有重新编译的情况下可以在linux和widows上用 gcc -Wall -o file file.c 编译l...
  • 21 votes
     answers
     views

    编译的程序如何与操作系统交互?

    编译程序时,它将转换为机器可以“理解”的机器代码 . 这个机器代码如何与操作系统交互以执行从键盘输入的操作?对我来说,似乎机器代码应该在比操作系统更低的级别运行,因此,我无法理解操作系统如何充当编译应用程序和硬件之间的中介 . PS:我刚开始进行C编程,我正在努力了解cin和cout是如何工作的

热门问题