Advanced info on CPU Emulators


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Advanced info on CPU Emulators
# 1  
Old 06-13-2011
Advanced info on CPU Emulators

I have searched and searched this topic but without looking at source code ; my next step maybe , I find the same ambiguous information.

My main question is how is the target code translated? It is stated that there are variables created that hold the data that the emulated CPU would hold in it's registers so I assume that an algorithm is run with this data to produce the binary that the CPU needs. Would these variables represent a dummy CPU and the algorithms convert the target CPU variables (registers) to what the host can execute?

Interpreted implies that the Emulator would just be substituting code for other code from a look-up table but then the program would actually be more or less ported at this point would it not?

Any help or direction will be appreciated.Smilie
# 2  
Old 06-13-2011
consulting QEMU Documentation might help
This User Gave Thanks to Yogesh Sawant For This Post:
# 3  
Old 06-14-2011
Quote:
Originally Posted by theKbStockpiler
Interpreted implies that the Emulator would just be substituting code for other code from a look-up table but then the program would actually be more or less ported at this point would it not?
It's hard to call something 'ported' when it can't run outside the emulator, no.

The exact approach may depend on the emulator in question. qemu, for instance, can use CPU virtualization features if you're emulating the same architecture you're on -- setting up a virtual environment in hardware. This lets programs run in the virtual environment mostly natively, just trapping a few higher-ring instructions and the like so software can take over and fill in the gaps. This was actually possible without hardware virtualization support, but it makes it much easier and more efficient -- I'm not too well read on the details but suspect it involves more direct/explicit ways for the client to talk to the host, for starters.

For emulators that run instructions that are completely alien to the native processor, the obvious way would be to make a data structure in memory that represents the registers of the native CPU, and use something like a big switch statement or look-up table to branch to the appropriate code for each instruction. If the emulated CPU has fewer registers than the native one I suppose you could stick everything in registers, use jump tables, self-modifying code, raw ASM and other dirty tricks to make it much faster but in the end it's the same idea.
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 06-14-2011
Maybe this might help.
This User Gave Thanks to shamrock For This Post:
# 5  
Old 06-15-2011
Thanks for the Replies!

Why emulate the CPU if you have the instruction set? The data structure is Really the Emulated CPU is it not? The emulated CPU would be imaginary besides for its reprentation in a file the emulator would address so I could have registers of how many and what size I could dream up could I not?

Thanks again!

Last edited by theKbStockpiler; 06-15-2011 at 10:20 AM.. Reason: Still learning basic grammar
# 6  
Old 06-15-2011
Quote:
Originally Posted by theKbStockpiler
Why emulate the CPU if you have the instruction set?
It's been found useful to break up one big server into many smaller, virtual ones. When you hear the term "virtual server" this is what they're talking about, a virtual environment inside a bigger server in which you can install pretty much whatever OS and software you want. Sometimes the host OS supports virtual environments natively, or it can be done through software like Qemu and VMware. Hardware virtualization has made this reasonably efficient now, but if they had to actually emulate all these environments instruction by instruction? It wouldn't be practical.
Quote:
The data structure is Really the Emulated CPU is it not?
Data is registers; they just sit there. The program has to decide what to do to them. In a real CPU, this would be decided in hardware. In a software emulator, it has to do it 'by hand' as it were, decoding which instruction it is with binary logic operations and finding it in a big look-up table or something, then doing operations on the "registers" as appropriate.
Quote:
The emulated CPU would be imaginary besides for its reprentation in a file the emulator would address so I could have registers of how many and what size I could dream up could I not?
Absolutely. I was just talking about optimization.

Last edited by Corona688; 06-15-2011 at 01:25 PM..
This User Gave Thanks to Corona688 For This Post:
# 7  
Old 06-18-2011
I'm having a trouble putting the big picture together

Okay, I write code that mimics a CPU in that it has memory assigned to registers and flags and such to document the entire state of the CPU. I can't find a way around that I believe that for every target CPU instruction my emulator basically looks up a routine in a table and this routine changes the state of my phony CPU that exists in memory. Now I would have the phony CPU run the data and this would just be saved in memory. What would the process or application be called that puts this data in a certain form so the O.S would then run it and how would it do it?

Any help will be appreciated!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Best ways to get clear info about CPU and Memory

Hello all i did search the web and found allot of answers but im confused what are the best ways to get this info via Linux default commands 1. current Cpu Usage in Percent 2. current Memory Usage In Bytes 3. current Memory Available In Bytes Thanks! (2 Replies)
Discussion started by: umen
2 Replies

2. AIX

To get only the cpu info from the topas command terminal

To get only the cpu info from the topas command terminal. CPU User% Kern% Wait% Idle% Physc Entc ALL 2.3 4.4 0.0 93.3 0.07 7.7 I tried some thing like this but did not work topas << done grep "ALL" q done Can someone help me in this. (5 Replies)
Discussion started by: rpm120
5 Replies

3. Shell Programming and Scripting

Perl agent which calculates CPU info and more

Hello to everyone. This is my first post. I want to make one perl agent which calculate following things from Linux Server. Actually I want to pull all this information from 2 linux client and wants to display on web interface. First I want to calculate below details 1) CPU 2) MEMORY 3)... (6 Replies)
Discussion started by: sania.mirza
6 Replies

4. Shell Programming and Scripting

Generic command for CPU info

Dear all, Is there any generic command working on all Unix listing the CPU of a server? I found different command line per OS but I am looking for a more generic one. Thanks for your answer. (5 Replies)
Discussion started by: sgoiffon
5 Replies

5. HP-UX

CPU Info

Hi, I am going to buy a software that is licenced per CORE. I have a HPUX B1123 64 bit with 8 cpus. How can i know how many cores are in my machine ? Thanks (3 Replies)
Discussion started by: yoavbe
3 Replies

6. AIX

How to access process and cpu info on AIX?

Hi, may be this is an AIX noob question: my current C++ application runs on Linux and is quite memory consuming. Therefore, the application writes a logfile after it has finished containing memory information, CPU information, information on the running other processes besides my application... (5 Replies)
Discussion started by: DarthVader77
5 Replies

7. Gentoo

top in batch mode, cpu info is wrong

well. the title says it all. im runing top in batch mode like this top -b -n1 > somefile but the cpu usage info is not correct. if i run top normally, the first second, i see the same wrong info, and then it corrects itself. i found only one small mention of it on this forum. with this link... (7 Replies)
Discussion started by: broli
7 Replies

8. HP-UX

cpu info

is there a single command or location from which one can get information like cpu Mhz,cpu cache...etc in HP UX:) (1 Reply)
Discussion started by: vijayca
1 Replies

9. UNIX for Dummies Questions & Answers

bus speed and CPU info

Hi, Is there a command I can use to find out how many CPU's and what type are on my server? (I was told to use cat /proc/cpuinfo) Also, how do I know what kind of bus speeds are on my server? Thanks in advance:) (3 Replies)
Discussion started by: ihot
3 Replies

10. UNIX for Dummies Questions & Answers

any emulators

iam new to unix , i would like to practice unix commands at home, can anyone help me to know if there are any emulators that i can download to practice or any trial versions that can be installed to practice. Regards dep (1 Reply)
Discussion started by: dep
1 Replies
Login or Register to Ask a Question