Re: regarding privilege levels of pentium 4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Again, this is not a gcc question, but a linxu question. The right place might be kerneltrap etc., but for now, try digging google for CPU rings / CPU ring levels ...

For x86, ring level 0 is the only ring allowing cli/sti among some other calls. In Linux those are exclusive for KERNEL SPACE, thus, no user program can perform these instructions, it will trigger a segmentation fault, since it tries to cross the limits of the ring it is run in (I assume ring 3, I am not sure though) ....

Regards

-Sven

P.S.: You certainly will have to write a kernel driver/module to use those calls - I assume that's why there is a kernel profiling infrastructure (Read the kernel's documentation) ...

P.P.S.: Further Reading I recommend, aside from the kernel docs: CPU Manual on Protected Mode and Rings, general Books on Operating systems ...

ranjith kumar wrote:
--- Sven Eschenberg <eschenb@xxxxxxxxxxxxxxxxxxx>
wrote:

Hi Ranjith,

I might be wrong on this, but I think the question
is, if the Operating System permits it or under which circumstances. It's neither a question of what gcc or the hardware does, but what the OS you are using allows to which processes.
Thanks. I am sending more details of my problem.

The OS I am using       : Linux.
The language in which the program is written : C(I am
attaching the program)
The compiler : gcc 3.2.3
Processor   : Pentium 4
I know password for root login. I logged in as root
and compiled my program. When compiled no errors were
reported. But when I run the program it simply shows
"Segmentation fault".
My goal is to measure performance parameters (for
example the number of branch instructions that were
mispredicted), on Pentium 4, using "RDMSR" and "WRMSR"
instructions. Also I want to disble interrupts while
running my program.
The problem is that those instructions can be run only
at privilege level zero.

Can you help me.
Thanks.


It might be, you need 'just' root priviledges, but
I'd rather assume, that you need to be within the kernel's context, since a cli command endangers system stability (it could lead to a lock
up) ...

Regards

-Sven

ranjith kumar wrote:
 Hi,


  How can we tell at what privilege level a
program is
running.
  Is it possible to run a program at privilege
level
'zero' on a processor
like Pentium 4.

   Actually I want to disable interrupts while
running
my program. This
can be done by "cli" instruction. Using "asm
inline"
feature of GCC, we
can include assembly instructions  in programs of
C,
C++...etc.

    But the problem is that "cli" instruction can
be
executed only at
privilege level "zero".

Can anyone  help me.




Thanking you.


	
	
		

___________________________________________________________
All new Yahoo! Mail "The new Interface is stunning
in its simplicity and ease of use." - PC Magazine
http://uk.docs.yahoo.com/nowyoucan.html


	
	
		
___________________________________________________________ All new Yahoo! Mail "The new Interface is stunning in its simplicity and ease of use." - PC Magazine http://uk.docs.yahoo.com/nowyoucan.html
------------------------------------------------------------------------

#include<stdio.h>
int main(void)
{
unsigned int p1;
asm volatile ("cli;");


asm volatile (" movl $0x300, %%ecx;"
"RDPMC;"
"movl %%eax, %0;"
:"=r"(p1)
:
:"%ecx","%edx","%eax");

printf("\n %u\n",p1);


asm volatile ("sti;");

}



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux