[C/Windows] Applicatie in verschillende modi

Pagina: 1
Acties:

  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
(Windows) applicaties kunnen in verschillende modi draaien. Zo kan een applicatie bijvoorbeeld in user-mode draaien of in privileged mode draaien. Hoe kan ik dat in een eenvoudige C-applicatie roepassen?

Wat voorbeeldcode zou ook van pas kunnen komen.

[ Voor 12% gewijzigd door Dr. Malsain op 10-04-2004 00:51 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Applicaties draaien in user mode. Privileged is voor drivers, omdat die hardware aan moeten kunnen sturen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
MSalters schreef op 10 april 2004 @ 12:47:
Applicaties draaien in user mode. Privileged is voor drivers, omdat die hardware aan moeten kunnen sturen.
Hm, ja, ik heb hier een opdracht van school. Het gaat over Besturingssystemen.

Een van de opdrachten is als volgt:
a. Schrijf een C programma dat voornamelijk in user mode draait.
b. Schrijf een C programma dat voornamelijk in priviledged mode draait.
c. Laat de verschillen zien met behulp van de perfomance monitor (perfmon.exe).

  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
Dus user-mode zou de mode zijn waarin een normale applicatie zou draaien. Misschien dat hier op GoT een aantal ervaring programmeurs rond-browsen die me kunnen vertellen wat "privileged mode" precies inhoudt en hoe ik een applicatie in deze mode kan laten draaien.

  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Ik vind het maar een vage opdracht. Ten eerste horen normale programma's eigenlijk nooit in privileged mode te draaien. Dat is zoals MSalters zei voorbehouden aan drivers. Het is dan ook niet zomaar even mogelijk een programma in privileged mode te laten draaien alsof het simpelweg een optie is. Je zult dan echt een driver moeten schrijven en daar worden weer een aantal eisen aan gesteld door Windows. Bovendien kan je in drivers de win32 API weer niet gebruiken en aangezien C libraries daar op gebaseerd zijn kun je ook de standaard C functies zoals printf niet eens gebruiken.

Ten tweede is opdracht C ook wat vreemd aangezien performance van zoveel factoren afhankelijk is. In privileged mode zal je waarschijnlijk sneller met de kernel kunnen communiceren maar zolang er geen verdere eisen aan de aard van of overeenkomst tussen de programma's worden gesteld krijg je nogal een rare vergelijking lijkt me. edit: Of het doel van de laatste opdracht moet zijn te laten zien dat ze daadwerkelijk in kernel dan wel user mode draaien, dan heeft het nog wel zin.

edit 2:
Als ik nog eens naar de opdracht kijk staat er wel 'voornamelijk' in, misschien is het de bedoeling wel gewoon een user mode programma te schrijven maar in de eerste weinig kernel functies te gebruiken en in de tweede juist heel veel? Dus bij A bijvoorbeeld een of andere lange berekening, en bij B veel lezen en schrijven naar een file (aangezien dat via de kernel moet en dus voor een groot deel in privileged mode draait)?

[ Voor 27% gewijzigd door madwizard op 12-04-2004 14:53 ]

www.madwizard.org


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Niets mis met huiswerkvragen, maar "maak mijn huiswerk" doen we niet aan. Bovendien heb je duidelijk nog geen seconde vooronderzoek gedaan.

Zie ook:
P&W FAQ - De "quickstart"
P&W FAQ - gedrag
P&W FAQ - Scriptrequests

Professionele website nodig?


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
Zoals madwizard al opmerkte is het woord voornamelijk belangrijk. Na wat verder uitzoekwerk en rondvraag kan ik zeggen dat er twee verschillende processen zijn een besturingssysteem. Het ene type process is een user-mode process de ander is een privileged-mode process (ook wel bekend als kernel/syteem/protected mode).

Deze modi zijn ingebouwd om te vookomen dat bijv. een besturingssysteem wordt overschreven of dat een applicatie foutieve hardware handelingen uitvoert. Wanneer een besturingssysteem wordt gestart en alles laadt is dit in privileged mode. Doet een niet-OS-eigen-applicatie een handeling dan is dat in princiepe in user-mode. Doet de applicatie een aanvraag voor bepaalde 'protected commands' zoals I/O (bijv. in C -> "fopen()")handelingen of hardware acties (bijv. in C-> "printf()") dan wordt omgeschakeld naar priviliged-mode en gekeken of de aanvraag van de applicatie terecht is. Privileged-mode handelingen worden dus door het OS voor de applicatie uitgevoerd.

In de praktijk is het geheel mooi te bekijken door in Performance Monitor in Windows naar user processen te kijken in de grafiek en naar privileged-mode processen. Te zien is dan dat de grafiek naar 100 % springt wanneer bijv in een loop een schrijfactie wordt gedaan naar de harde schijf of een printf-actie naar de console.

Voer je in je applicatie bijvoorbeeld alleen een berkening uit en verder geen output naar het scherm dan zul je de user-mode processen naar 100% zien gaan. Wanneer het systeem idle is wordt de process-time toebedeeld aan het syteem zelf en zal dus privilleged-mode process time op 100% staan.
Pagina: 1