Re: [gem5-dev] Architecture of gem5
Yeah, I remember the "Linux process trackers"; they were my motivation for exploring the memory reads on the kernel structures. I wanted to extend them, but the source was closed so I started hacking around to implement my own. Unfortunately, I don't get to use FS here at AMD much; we rely almost exclusively on SE for now. So, I don't know if it's possible to make Python scripts interact with a running kernel in FS. I suspect that it might be possible to build the mechanism easily enough though. You could create Python wrappers for C++ methods that read physical memory; the memory should be accessible through the "System" class. To make the equivalent of HAPs, you could create pseudo instructions and instrument a Linux kernel with them. Alternatively, you could add hooks into gem5 on register state changes to do some magical thing that you want to do. Hopefully someone else has something more constructive to say, but that's what comes to mind for me. The caveat with this kind of thing is that we would have to maintain it as the Linux kernel moves forward to keep it working. The kernel developers have a tendency to change the symbols that are made available through kallsyms/System.map. Currently, I think that they're not even visible by default with a kernel; they turned them off for security reasons. We'd have to compile a new kernel with the switch flipped on. Anyways, I might not be a big deal, because we already package our FS kernels and post them on the gem5 website. This is a project that I've wanted to work on for the past few years, but I haven't had the time to devote to it. However, I do agree that this would be an excellent feature to add for research purposes. -Brandon -Original Message- From: gem5-dev [mailto:gem5-dev-boun...@gem5.org] On Behalf Of Boris Shingarov/Employee/LW-US Sent: Friday, September 9, 2016 8:03 AM To: gem5 Developer List <gem5-dev@gem5.org> Subject: Re: [gem5-dev] Architecture of gem5 I remember back when I was using Simics, there were these things called "Linux process trackers" that did exactly that. It was all written in Python, and there was a point when various processor-specific trackers got simplified / pulled together into one generic tracker in which only the truly ISA-dependent knowledge was pushed down to subclasses like x86_ops/ppc_ops etc., which would override methods like "syscall_num()" according with passing that num in eax vs r0; or overriding "current_task()" according to the struct being kept on the kernel stack vs pointed by sprg3, etc. It would be extremely interesting to have similar functionality in gem5, and I have even thought about writing something like that myself, but I don't know much about the infrastructure that would allow one to hook up such Python scripts to haps like "memory access breakpoint" or "interrupt" or "user/kernel mode change" easily and even on-the-fly in the middle of debugging the kernel. If someone could provide an initial explanation of what mechanisms are there beyond using Python for initial configuration, it would serve as a push forward at least for me. -"gem5-dev" <gem5-dev-boun...@gem5.org> wrote: - To: gem5 Developer List <gem5-dev@gem5.org> From: "Potter, Brandon" Sent by: "gem5-dev" Date: 09/08/2016 07:26PM Subject: Re: [gem5-dev] Architecture of gem5 With full-system mode, you can do kernel introspection. The kernel resides in the simulated memory which you have complete control over; you can do whatever you want to do with it. The kernel is what is responsible for managing the processes and their memory so if you want interesting kernel-level information, you might look into reading the kernel's physical memory directly. With complete access to the full memory layout, you can play tricks with the physical memory and OS symbols to access structures, namely task_struct and mm_struct. It's difficult to do this and requires a bit of trial and error to figure out which symbols the kernel exposes to allow you to do this, but it is possible. The trick is to read the hex values from physical memory and compare them with the Linux kernel source; you can reason about which fields are pointers and which have values that are defined in the source. It just takes work to puzzle out the rest. I did this once with Simics so it is possible, but it's time consuming. If you obtain access to the task_struct list, you can get access to the mm_struct which give you the full memory layout for each process. With the full memory layout, you can discern which areas of each process' virtual address space are mapped and which physical frames (in the simulated memory) correspond to those virtual address. In this way, you can get both the virtual and physical addresses of addresses for any process. As J
Re: [gem5-dev] Architecture of gem5
gem5/src/arch/x86/process.hh gem5/src/arch/x86/process.cc gem5/src/arch/x86/regs/misc.hh gem5/src/arch/x86/regs/segment.hh I'd look through full-system code and either find a hook or make one to allow access to the segment registers in the preceding files. It might take some time to figure that out, but this should get you started. -Brandon -Original Message- From: gem5-dev [mailto:gem5-dev-boun...@gem5.org] On Behalf Of Jasmin Jahic Sent: Friday, September 9, 2016 12:45 AM To: gem5 Developer List <gem5-dev@gem5.org> Subject: Re: [gem5-dev] Architecture of gem5 @Jason, @Brandon, thank you very much for your explanations and references. I will try to solve this and if I succeed I will post the solution. I just have one more technical question. Where in gem5 I can track registers of the CPU? I am able to identify fetch, decode, execute phases, as well as the access to the abstract memory and cache pages. I am using atomic/simple CPU. Best regards, Jasmin On Fri, Sep 9, 2016 at 1:50 AM, Potter, Brandon <brandon.pot...@amd.com> wrote: > "If the sign extended bits are 1s, then the accesses are going > into kernel space and you can be reasonably sure that the kernel is > executing. So, the fool proof method is the CPL level in the code > segment register, but you can sometimes tell by the accesses if the > kernel is running or not." > > I just want to reiterate that this is not the best method, the kernel > can access user space virtual address so the kernel might be running > and you might see accesses to user-space virtual addresses, but it's > not guaranteed to tell whether you're in kernel mode or user mode. You > should really check the ring mode (if using X86). > > "With complete access to the full memory layout, you can play > tricks with the physical memory and OS symbols to access structures, > namely task_struct and mm_struct. It's difficult to do this and > requires a bit of trial and error to figure out which symbols the > kernel exposes to allow you to do this, but it is possible. The trick > is to read the hex values from physical memory and compare them with > the Linux kernel source; you can reason about which fields are > pointers and which have values that are defined in the source. It just > takes work to puzzle out the rest. I did this once with Simics so it is > possible, but it's time consuming." > > If you want to go down this rabbit hole, here are a couple of notes on > this. Firstly, you need to know about the kernel symbols (kallsyms), > https://onebitbug.me/2011/03/04/introducing-linux-kernel-symbols/. The > kallsyms get loaded from something in /boot (System.map I think or > some configuration file). Given these addresses, you can figure out > where the symbols are in physical memory and read their hex values. > > -Brandon > > -Original Message- > From: Potter, Brandon > Sent: Thursday, September 8, 2016 6:26 PM > To: gem5 Developer List <gem5-dev@gem5.org> > Subject: RE: [gem5-dev] Architecture of gem5 > > With full-system mode, you can do kernel introspection. The kernel > resides in the simulated memory which you have complete control over; > you can do whatever you want to do with it. The kernel is what is > responsible for managing the processes and their memory so if you want > interesting kernel-level information, you might look into reading the > kernel's physical memory directly. > > With complete access to the full memory layout, you can play tricks > with the physical memory and OS symbols to access structures, namely > task_struct and mm_struct. It's difficult to do this and requires a > bit of trial and error to figure out which symbols the kernel exposes > to allow you to do this, but it is possible. The trick is to read the > hex values from physical memory and compare them with the Linux kernel > source; you can reason about which fields are pointers and which have > values that are defined in the source. It just takes work to puzzle > out the rest. I did this once with Simics so it is possible, but it's time > consuming. > > If you obtain access to the task_struct list, you can get access to > the mm_struct which give you the full memory layout for each process. > With the full memory layout, you can discern which areas of each > process' virtual address space are mapped and which physical frames > (in the simulated > memory) correspond to those virtual address. In this way, you can get > both the virtual and physical addresses of addresses for any process. > > As Jason mentioned, you can use /proc/{some_pid}/maps to figure out > the virtual address ranges that are mapped (at a specific point in the > execution of that process). Furthermo
Re: [gem5-dev] Architecture of gem5
I remember back when I was using Simics, there were these things called "Linux process trackers" that did exactly that. It was all written in Python, and there was a point when various processor-specific trackers got simplified / pulled together into one generic tracker in which only the truly ISA-dependent knowledge was pushed down to subclasses like x86_ops/ppc_ops etc., which would override methods like "syscall_num()" according with passing that num in eax vs r0; or overriding "current_task()" according to the struct being kept on the kernel stack vs pointed by sprg3, etc. It would be extremely interesting to have similar functionality in gem5, and I have even thought about writing something like that myself, but I don't know much about the infrastructure that would allow one to hook up such Python scripts to haps like "memory access breakpoint" or "interrupt" or "user/kernel mode change" easily and even on-the-fly in the middle of debugging the kernel. If someone could provide an initial explanation of what mechanisms are there beyond using Python for initial configuration, it would serve as a push forward at least for me. -"gem5-dev" <gem5-dev-boun...@gem5.org> wrote: - To: gem5 Developer List <gem5-dev@gem5.org> From: "Potter, Brandon" Sent by: "gem5-dev" Date: 09/08/2016 07:26PM Subject: Re: [gem5-dev] Architecture of gem5 With full-system mode, you can do kernel introspection. The kernel resides in the simulated memory which you have complete control over; you can do whatever you want to do with it. The kernel is what is responsible for managing the processes and their memory so if you want interesting kernel-level information, you might look into reading the kernel's physical memory directly. With complete access to the full memory layout, you can play tricks with the physical memory and OS symbols to access structures, namely task_struct and mm_struct. It's difficult to do this and requires a bit of trial and error to figure out which symbols the kernel exposes to allow you to do this, but it is possible. The trick is to read the hex values from physical memory and compare them with the Linux kernel source; you can reason about which fields are pointers and which have values that are defined in the source. It just takes work to puzzle out the rest. I did this once with Simics so it is possible, but it's time consuming. If you obtain access to the task_struct list, you can get access to the mm_struct which give you the full memory layout for each process. With the full memory layout, you can discern which areas of each process' virtual address space are mapped and which physical frames (in the simulated memory) correspond to those virtual address. In this way, you can get both the virtual and physical addresses of addresses for any process. As Jason mentioned, you can use /proc/{some_pid}/maps to figure out the virtual address ranges that are mapped (at a specific point in the execution of that process). Furthermore, you can use pagemap to figure out what the physical address is. The catch with using these methods is that the simulator has to be running and the process that you're interested in examining has to be running to read the files (because the maps and pagemaps features are pseudo files). If you have a short-running process, you typically have to add a `while(1)` loop into the application to figure out the mappings. Also as Jason mentioned on X86, you can examine the ring level that the CPU is in to figure out if the kernel is executing or if the process is running in userspace; if you don't understand what we're talking about, read http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/. You can examine the segmentation registers and figure out at any given time what's going on. (If you don't know much about memory, I'd read the rest of his blog posts on the topic as well. It's a nice summary of Linux memory for the uninitiated.) Also, userspace processes should not have access to kernel space data. Linux draws a line in the virtual memory sand for different architectures to specify what is "kernel space" and what is "user space". With X86-64, 48 bits [47...0] are used for virtual addresses. (The 47th bit gets sign-extended to the 63rd bit so that all of the intervening bits don't really matter.) If the sign extended bits are 1s, then the accesses are going into kernel space and you can be reasonably sure that the kernel is executing. So, the fool proof method is the CPL level in the code segment register, but you can sometimes tell by the accesses if the kernel is running or not. If you want to learn about memory in Linux, the canonical document, at least in my mind is: https://www.kernel.org/doc/gorman/. (Although, the book is a bit dated.) If you're look
Re: [gem5-dev] Architecture of gem5
@Jason, @Brandon, thank you very much for your explanations and references. I will try to solve this and if I succeed I will post the solution. I just have one more technical question. Where in gem5 I can track registers of the CPU? I am able to identify fetch, decode, execute phases, as well as the access to the abstract memory and cache pages. I am using atomic/simple CPU. Best regards, Jasmin On Fri, Sep 9, 2016 at 1:50 AM, Potter, Brandon <brandon.pot...@amd.com> wrote: > "If the sign extended bits are 1s, then the accesses are going > into kernel space and you can be reasonably sure that the kernel is > executing. So, the fool proof method is the CPL level in the code segment > register, but you can sometimes tell by the accesses if the kernel is > running or not." > > I just want to reiterate that this is not the best method, the kernel can > access user space virtual address so the kernel might be running and you > might see accesses to user-space virtual addresses, but it's not guaranteed > to tell whether you're in kernel mode or user mode. You should really check > the ring mode (if using X86). > > "With complete access to the full memory layout, you can play > tricks with the physical memory and OS symbols to access structures, namely > task_struct and mm_struct. It's difficult to do this and requires a bit of > trial and error to figure out which symbols the kernel exposes to allow you > to do this, but it is possible. The trick is to read the hex values from > physical memory and compare them with the Linux kernel source; you can > reason about which fields are pointers and which have values that are > defined in the source. It just takes work to puzzle out the rest. I did > this once with Simics so it is possible, but it's time consuming." > > If you want to go down this rabbit hole, here are a couple of notes on > this. Firstly, you need to know about the kernel symbols (kallsyms), > https://onebitbug.me/2011/03/04/introducing-linux-kernel-symbols/. The > kallsyms get loaded from something in /boot (System.map I think or some > configuration file). Given these addresses, you can figure out where the > symbols are in physical memory and read their hex values. > > -Brandon > > -Original Message- > From: Potter, Brandon > Sent: Thursday, September 8, 2016 6:26 PM > To: gem5 Developer List <gem5-dev@gem5.org> > Subject: RE: [gem5-dev] Architecture of gem5 > > With full-system mode, you can do kernel introspection. The kernel resides > in the simulated memory which you have complete control over; you can do > whatever you want to do with it. The kernel is what is responsible for > managing the processes and their memory so if you want interesting > kernel-level information, you might look into reading the kernel's physical > memory directly. > > With complete access to the full memory layout, you can play tricks with > the physical memory and OS symbols to access structures, namely task_struct > and mm_struct. It's difficult to do this and requires a bit of trial and > error to figure out which symbols the kernel exposes to allow you to do > this, but it is possible. The trick is to read the hex values from physical > memory and compare them with the Linux kernel source; you can reason about > which fields are pointers and which have values that are defined in the > source. It just takes work to puzzle out the rest. I did this once with > Simics so it is possible, but it's time consuming. > > If you obtain access to the task_struct list, you can get access to the > mm_struct which give you the full memory layout for each process. With the > full memory layout, you can discern which areas of each process' virtual > address space are mapped and which physical frames (in the simulated > memory) correspond to those virtual address. In this way, you can get both > the virtual and physical addresses of addresses for any process. > > As Jason mentioned, you can use /proc/{some_pid}/maps to figure out the > virtual address ranges that are mapped (at a specific point in the > execution of that process). Furthermore, you can use pagemap to figure out > what the physical address is. The catch with using these methods is that > the simulator has to be running and the process that you're interested in > examining has to be running to read the files (because the maps and > pagemaps features are pseudo files). If you have a short-running process, > you typically have to add a `while(1)` loop into the application to figure > out the mappings. > > Also as Jason mentioned on X86, you can examine the ring level that the > CPU is in to figure out if the kernel is executing or if the process is > running in userspace; if you don't under
Re: [gem5-dev] Architecture of gem5
"If the sign extended bits are 1s, then the accesses are going into kernel space and you can be reasonably sure that the kernel is executing. So, the fool proof method is the CPL level in the code segment register, but you can sometimes tell by the accesses if the kernel is running or not." I just want to reiterate that this is not the best method, the kernel can access user space virtual address so the kernel might be running and you might see accesses to user-space virtual addresses, but it's not guaranteed to tell whether you're in kernel mode or user mode. You should really check the ring mode (if using X86). "With complete access to the full memory layout, you can play tricks with the physical memory and OS symbols to access structures, namely task_struct and mm_struct. It's difficult to do this and requires a bit of trial and error to figure out which symbols the kernel exposes to allow you to do this, but it is possible. The trick is to read the hex values from physical memory and compare them with the Linux kernel source; you can reason about which fields are pointers and which have values that are defined in the source. It just takes work to puzzle out the rest. I did this once with Simics so it is possible, but it's time consuming." If you want to go down this rabbit hole, here are a couple of notes on this. Firstly, you need to know about the kernel symbols (kallsyms), https://onebitbug.me/2011/03/04/introducing-linux-kernel-symbols/. The kallsyms get loaded from something in /boot (System.map I think or some configuration file). Given these addresses, you can figure out where the symbols are in physical memory and read their hex values. -Brandon -Original Message- From: Potter, Brandon Sent: Thursday, September 8, 2016 6:26 PM To: gem5 Developer List <gem5-dev@gem5.org> Subject: RE: [gem5-dev] Architecture of gem5 With full-system mode, you can do kernel introspection. The kernel resides in the simulated memory which you have complete control over; you can do whatever you want to do with it. The kernel is what is responsible for managing the processes and their memory so if you want interesting kernel-level information, you might look into reading the kernel's physical memory directly. With complete access to the full memory layout, you can play tricks with the physical memory and OS symbols to access structures, namely task_struct and mm_struct. It's difficult to do this and requires a bit of trial and error to figure out which symbols the kernel exposes to allow you to do this, but it is possible. The trick is to read the hex values from physical memory and compare them with the Linux kernel source; you can reason about which fields are pointers and which have values that are defined in the source. It just takes work to puzzle out the rest. I did this once with Simics so it is possible, but it's time consuming. If you obtain access to the task_struct list, you can get access to the mm_struct which give you the full memory layout for each process. With the full memory layout, you can discern which areas of each process' virtual address space are mapped and which physical frames (in the simulated memory) correspond to those virtual address. In this way, you can get both the virtual and physical addresses of addresses for any process. As Jason mentioned, you can use /proc/{some_pid}/maps to figure out the virtual address ranges that are mapped (at a specific point in the execution of that process). Furthermore, you can use pagemap to figure out what the physical address is. The catch with using these methods is that the simulator has to be running and the process that you're interested in examining has to be running to read the files (because the maps and pagemaps features are pseudo files). If you have a short-running process, you typically have to add a `while(1)` loop into the application to figure out the mappings. Also as Jason mentioned on X86, you can examine the ring level that the CPU is in to figure out if the kernel is executing or if the process is running in userspace; if you don't understand what we're talking about, read http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/. You can examine the segmentation registers and figure out at any given time what's going on. (If you don't know much about memory, I'd read the rest of his blog posts on the topic as well. It's a nice summary of Linux memory for the uninitiated.) Also, userspace processes should not have access to kernel space data. Linux draws a line in the virtual memory sand for different architectures to specify what is "kernel space" and what is "user space". With X86-64, 48 bits [47...0] are used for virtual addresses. (The 47th bit gets sign-extended to the 63rd bit so that all of the intervening bits don't really matter.) If the sign extended bits are 1s, then the
Re: [gem5-dev] Architecture of gem5
With full-system mode, you can do kernel introspection. The kernel resides in the simulated memory which you have complete control over; you can do whatever you want to do with it. The kernel is what is responsible for managing the processes and their memory so if you want interesting kernel-level information, you might look into reading the kernel's physical memory directly. With complete access to the full memory layout, you can play tricks with the physical memory and OS symbols to access structures, namely task_struct and mm_struct. It's difficult to do this and requires a bit of trial and error to figure out which symbols the kernel exposes to allow you to do this, but it is possible. The trick is to read the hex values from physical memory and compare them with the Linux kernel source; you can reason about which fields are pointers and which have values that are defined in the source. It just takes work to puzzle out the rest. I did this once with Simics so it is possible, but it's time consuming. If you obtain access to the task_struct list, you can get access to the mm_struct which give you the full memory layout for each process. With the full memory layout, you can discern which areas of each process' virtual address space are mapped and which physical frames (in the simulated memory) correspond to those virtual address. In this way, you can get both the virtual and physical addresses of addresses for any process. As Jason mentioned, you can use /proc/{some_pid}/maps to figure out the virtual address ranges that are mapped (at a specific point in the execution of that process). Furthermore, you can use pagemap to figure out what the physical address is. The catch with using these methods is that the simulator has to be running and the process that you're interested in examining has to be running to read the files (because the maps and pagemaps features are pseudo files). If you have a short-running process, you typically have to add a `while(1)` loop into the application to figure out the mappings. Also as Jason mentioned on X86, you can examine the ring level that the CPU is in to figure out if the kernel is executing or if the process is running in userspace; if you don't understand what we're talking about, read http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/. You can examine the segmentation registers and figure out at any given time what's going on. (If you don't know much about memory, I'd read the rest of his blog posts on the topic as well. It's a nice summary of Linux memory for the uninitiated.) Also, userspace processes should not have access to kernel space data. Linux draws a line in the virtual memory sand for different architectures to specify what is "kernel space" and what is "user space". With X86-64, 48 bits [47...0] are used for virtual addresses. (The 47th bit gets sign-extended to the 63rd bit so that all of the intervening bits don't really matter.) If the sign extended bits are 1s, then the accesses are going into kernel space and you can be reasonably sure that the kernel is executing. So, the fool proof method is the CPL level in the code segment register, but you can sometimes tell by the accesses if the kernel is running or not. If you want to learn about memory in Linux, the canonical document, at least in my mind is: https://www.kernel.org/doc/gorman/. (Although, the book is a bit dated.) If you're looking to track a specific process in X86, you should be able to monitor the CR3 register to verify that the correct process is running; the CR3 holds the base frame for the page tables so it's a decent way to figure out if a 'special' process is being run. -Brandon -Original Message- From: gem5-dev [mailto:gem5-dev-boun...@gem5.org] On Behalf Of Jason Lowe-Power Sent: Wednesday, August 31, 2016 8:59 AM To: gem5 Developer List <gem5-dev@gem5.org> Subject: Re: [gem5-dev] Architecture of gem5 Hi Jasmin, In full-system mode, gem5 runs a full operating system and all software.It is analogous to a pure virtualization platform. In full-system mode, gem5 must model all devices, etc. that the OS expects to interact with. This is in comparison to syscall-emulation mode. In SE mode, gem5 only executes user-mode code. All OS system calls are routed into the simulator and are *emulated*. To answer your questions: - Is it possible to reason wether an instruction is user instruction or kernel instruction? Yes and no. No, there is no simple function to call to see if you are currently running in kernel or user mode. However, depending on your kernel / OS certain PC addresses represent kernel vs user-mode code. Additionally, you could watch what mode the CPU is in (ring-0 vs ring-3, etc), depending on the architecture. - Can we know to which process is an instruction belongs inside of the OS? This is a little more tricky, but it may be possible based on the p
Re: [gem5-dev] Architecture of gem5
Hi Jasmin, In full-system mode, gem5 runs a full operating system and all software.It is analogous to a pure virtualization platform. In full-system mode, gem5 must model all devices, etc. that the OS expects to interact with. This is in comparison to syscall-emulation mode. In SE mode, gem5 only executes user-mode code. All OS system calls are routed into the simulator and are *emulated*. To answer your questions: - Is it possible to reason wether an instruction is user instruction or kernel instruction? Yes and no. No, there is no simple function to call to see if you are currently running in kernel or user mode. However, depending on your kernel / OS certain PC addresses represent kernel vs user-mode code. Additionally, you could watch what mode the CPU is in (ring-0 vs ring-3, etc), depending on the architecture. - Can we know to which process is an instruction belongs inside of the OS? This is a little more tricky, but it may be possible based on the physical address of the PC and using OS interfaces (e.g., /proc on Linux). - How is memory mapped to OS processes? Again, this is tricky, but may be possible with introspection into /proc or something similar. Overall, I believe something may exist that does what you're trying to do. There was a presentation a few years ago at the gem5 users workshop that did some of these things. See the PDF here: http://gem5.org/wiki/images/9/9f/2012_12_01_gem5_workshop_Streamline.pdf. I don't know what the current state of that project is. You may want to contact the author directly. Hope this helps! Jason On Wed, Aug 31, 2016 at 6:28 AM Jasmin Jahicwrote: > Hello, > > I will try to refine my last question a bit. In the gem5 full system mode; > >- Is it possible to reason wether an instruction is user instruction or >kernel instruction? >- Can we know to which process is an instruction belongs inside of the >OS? >- How is memory mapped to OS processes? > > I hope that someone has some knowledge about the questions above. If yes, > they would help a lot. > > Best regards, > Jasmin > > > On Tue, Aug 30, 2016 at 6:22 PM, Stine, James > wrote: > > > Many apologies - my email got corrupted. Please ignore last Email. > > > > James > > > > > On Aug 30, 2016, at 11:21 AM, Stine, James > > wrote: > > > > > > I can make smaller if you want.. Let me know if not what you need or > > want. Thanks for letting me know! Take care. > > > > > > J > > > > > > > > > > > > > > >> On Aug 30, 2016, at 11:18 AM, Jasmin Jahic > > wrote: > > >> > > >> Hello, > > >> > > >> I have one question regarding the architecture of gem5 and I hope that > > you > > >> can help me. I am interested where gem5 in Full system mode ends and > > where > > >> the OS is completely taking over? > > >> > > >> For example, can I influence scheduling of the tasks by modifying the > > gem5 > > >> code directly, or is the gem5 simply running the OS as any other > > program? > > >> > > >> Another example, from the OS's console I can start a simple binary. > Can > > I > > >> modify the code to load a binary or is that handled completely through > > the > > >> OS, and gem5 cannot distinguish between instructions coming from the > OS > > or > > >> other process and the regular binary I would run from the console? > > >> > > >> Best regards, > > >> Jasmin > > >> ___ > > >> gem5-dev mailing list > > >> gem5-dev@gem5.org > > >> http://m5sim.org/mailman/listinfo/gem5-dev > > > > > > > ___ > > gem5-dev mailing list > > gem5-dev@gem5.org > > http://m5sim.org/mailman/listinfo/gem5-dev > > > ___ > gem5-dev mailing list > gem5-dev@gem5.org > http://m5sim.org/mailman/listinfo/gem5-dev > ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
Re: [gem5-dev] Architecture of gem5
Hello, I will try to refine my last question a bit. In the gem5 full system mode; - Is it possible to reason wether an instruction is user instruction or kernel instruction? - Can we know to which process is an instruction belongs inside of the OS? - How is memory mapped to OS processes? I hope that someone has some knowledge about the questions above. If yes, they would help a lot. Best regards, Jasmin On Tue, Aug 30, 2016 at 6:22 PM, Stine, Jameswrote: > Many apologies - my email got corrupted. Please ignore last Email. > > James > > > On Aug 30, 2016, at 11:21 AM, Stine, James > wrote: > > > > I can make smaller if you want.. Let me know if not what you need or > want. Thanks for letting me know! Take care. > > > > J > > > > > > > > > >> On Aug 30, 2016, at 11:18 AM, Jasmin Jahic > wrote: > >> > >> Hello, > >> > >> I have one question regarding the architecture of gem5 and I hope that > you > >> can help me. I am interested where gem5 in Full system mode ends and > where > >> the OS is completely taking over? > >> > >> For example, can I influence scheduling of the tasks by modifying the > gem5 > >> code directly, or is the gem5 simply running the OS as any other > program? > >> > >> Another example, from the OS's console I can start a simple binary. Can > I > >> modify the code to load a binary or is that handled completely through > the > >> OS, and gem5 cannot distinguish between instructions coming from the OS > or > >> other process and the regular binary I would run from the console? > >> > >> Best regards, > >> Jasmin > >> ___ > >> gem5-dev mailing list > >> gem5-dev@gem5.org > >> http://m5sim.org/mailman/listinfo/gem5-dev > > > > ___ > gem5-dev mailing list > gem5-dev@gem5.org > http://m5sim.org/mailman/listinfo/gem5-dev > ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
Re: [gem5-dev] Architecture of gem5
Many apologies - my email got corrupted. Please ignore last Email. James > On Aug 30, 2016, at 11:21 AM, Stine, Jameswrote: > > I can make smaller if you want.. Let me know if not what you need or want. > Thanks for letting me know! Take care. > > J > > > > >> On Aug 30, 2016, at 11:18 AM, Jasmin Jahic wrote: >> >> Hello, >> >> I have one question regarding the architecture of gem5 and I hope that you >> can help me. I am interested where gem5 in Full system mode ends and where >> the OS is completely taking over? >> >> For example, can I influence scheduling of the tasks by modifying the gem5 >> code directly, or is the gem5 simply running the OS as any other program? >> >> Another example, from the OS's console I can start a simple binary. Can I >> modify the code to load a binary or is that handled completely through the >> OS, and gem5 cannot distinguish between instructions coming from the OS or >> other process and the regular binary I would run from the console? >> >> Best regards, >> Jasmin >> ___ >> gem5-dev mailing list >> gem5-dev@gem5.org >> http://m5sim.org/mailman/listinfo/gem5-dev > ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
Re: [gem5-dev] Architecture of gem5
I can make smaller if you want.. Let me know if not what you need or want. Thanks for letting me know! Take care. J > On Aug 30, 2016, at 11:18 AM, Jasmin Jahicwrote: > > Hello, > > I have one question regarding the architecture of gem5 and I hope that you > can help me. I am interested where gem5 in Full system mode ends and where > the OS is completely taking over? > > For example, can I influence scheduling of the tasks by modifying the gem5 > code directly, or is the gem5 simply running the OS as any other program? > > Another example, from the OS's console I can start a simple binary. Can I > modify the code to load a binary or is that handled completely through the > OS, and gem5 cannot distinguish between instructions coming from the OS or > other process and the regular binary I would run from the console? > > Best regards, > Jasmin > ___ > gem5-dev mailing list > gem5-dev@gem5.org > http://m5sim.org/mailman/listinfo/gem5-dev ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev
[gem5-dev] Architecture of gem5
Hello, I have one question regarding the architecture of gem5 and I hope that you can help me. I am interested where gem5 in Full system mode ends and where the OS is completely taking over? For example, can I influence scheduling of the tasks by modifying the gem5 code directly, or is the gem5 simply running the OS as any other program? Another example, from the OS's console I can start a simple binary. Can I modify the code to load a binary or is that handled completely through the OS, and gem5 cannot distinguish between instructions coming from the OS or other process and the regular binary I would run from the console? Best regards, Jasmin ___ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev