VM υποσύστημα και διαχωρισμός 1-3:3-4 GB
Giorgos Keramidas
keramida at ceid.upatras.gr
Mon Apr 25 12:10:10 EEST 2005
On 2005-04-24 18:36, Giorgos Keramidas <keramida at ceid.upatras.gr> wrote:
>On 2005-04-23 15:27, Tsoukas Evangelos <tsoukase at gmail.com> wrote:
>> Συγνώμη παιδιά αλλά δύο φορές που το έστειλα δεν εμφανίστηκε. Ενυγουέι:
>>
>> Ερώτηση: Διάβασα ότι στο memory management ο kernel έχει 2 βασικά
>> segments: απο 1-3 GB για τα user-processes και 3-4 GB για τον ίδιο.
>> Κάθε κομμάτι έχει text kai data. Γιατί "διευθύνει" έτσι τη μνήμη αφού
>> αυτή είναι πολύ λιγότερη?
>
> Μπερδεύεις τον "εικονικό χώρο διευθύνσεων" ενός process (virtual address
> space) με τη "φυσική μνήμη" του συστήματος (physical address space).
Για να απαντήσω με πιο χρήσιμες λεπτομέρειες... Η ακριβής απάντηση για
την αρχική απορία δίνεται πολύ ωραία στη σελ. 144 του [McKusick2005] κι
αντίστοιχες εξηγήσεις για το VM υποσύστημα του Linux μπορούν να βρεθούν
online[KernelTrap].
Ένα μεγάλο μέρος της δουλειάς που κάνει ο πυρήνας κάθε φορά που
εκτελείται ένα system call είναι η αντιγραφή δεδομένων από userlevel σε
kernel space. Για να υλοποιηθεί αυτό υπαχουν δύο τρόποι:
α) Να είναι mapped όλο το address space του πυρήνα στο πάνω μέρος του
virtual address space κάθε διεργασίας.
β) Να γίνεται "overlay" όλο το 4 GB address space ενός process με αυτό
του πυρήνα κάθε φορά που γίνεται ένα context switch από userspace σε
kernel mode.
Στην πρώτη περίπτωση, αμέσως μόλις ο πυρήνας μπει σε privileged mode,
μπορεί να χρησιμοποιεί τις γνωστές bcopy(), memcpy() για να μεταφέρει
ένα αντίγραφο από το 1-3 GB user space στο 3-4 GB kernel space.
Στην δεύτερη περίπτωση ο πυρήνας πρέπει να κάνει διάφορα "περίεργα"
παιχνίδια με το mapping των virtual διευθύνσεων του user process και του
ίδιου του πυρήνα κι ύστερα να κάνει ΠΑΛΙ bcopy() ή memcpy() τα δεδομένα.
Από μετρήσεις που έγιναν βρέθηκε ότι ο χρόνος που περνά ο πυρήνας
κάνοντας copy δεδομένα από user space σε kernel mode κι ανάποδα είναι
της τάξης του 30% του συνολικού χρόνου που αφιερώνεται σε system calls.
Αν αυτή η λειτουργία γίνει 3 φορές πιο αργή η απόδοση πέφτει σημαντικά,
οπότε προτιμάται ο πρώτος τρόπος mapping των διευθύνσεων για να είναι
όσο το δυνατόν πιο καλή η απόδοση του πυρήνα.
ΑΝΑΦΟΡΕΣ
--------
[McKusick2005]
Kirk McKusick, George V. Neville-Neil. "The Design and Implementation
of the FreeBSD Operating System". Addison Wesley Professional, Aug
2004. ISBN: 0201702452 (http://www.awprofessional.com/title/0201702452)
[KernelTrap]
Amit Shah. "Feature: High Memory In The Linux Kernel". Feb 2004.
http://kerneltrap.org/node/2450
More information about the Linux-greek-users
mailing list