Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!usc!snorkelwacker!apple!uokmax!munnari.oz.au!uunet!mcsun!ukc!icdoc!tsun4.doc.ic.ac.uk!zmact61 From: zmact61@tsun4.doc.ic.ac.uk.doc.ic.ac.uk (D Spinellis) Newsgroups: comp.unix.wizards Subject: Re: /proc filesystems Summary: Memory map of the /proc image Keywords: proc memory map 8th edition Message-ID: <1517@gould.doc.ic.ac.uk> Date: 31 Jan 90 10:30:18 GMT References: <9100022@m.cs.uiuc.edu> Sender: news@doc.ic.ac.uk Reply-To: dds@cc.ic.ac.uk (Diomidis Spinellis) Organization: Imperial College Department of Computing Lines: 46 In article <9100022@m.cs.uiuc.edu> march@m.cs.uiuc.edu writes: > >I recently ran across a machine running SYSV Release 3.1.1 on a 3B15 >which, to my surprise, had a /proc filesystem. [...] >I understand that each file is a "window" into user space for a particular >PID. At any rate, what is the structure of a file within /proc? Is it >the same as the a.out with BSS allocated and used? How do you know >what read() is returning to you? The memory map for a process in the 8th edition as seen by using I/O into the /proc image is the following: Virtual address Length 0x80000000 ------------ user area UPAGES * NBPG ------------ STACK p.p_ssize ~~~~~~~~~~~~ Dragons ~~~~~~~~~~~~ DATA p.p_dsize ------------ TEXT p.p_tsize 0x00000000 ------------- You get then lengths from the proc structure. You need a special ioctl to access the proc structure as it resides in kernel space. To get the definition of UPAGES and NBPG include . The proc structure is defined in and the user structure in . The ioctl codes are defined in . To read the proc structure use: struct proc p; ioctl(f, PIOCGETPR, &p); Diomidis -- Diomidis Spinellis Internet: dds@cc.ic.ac.uk Department of Computing BITNET: dds@cc.ic.ac.uk Imperial College UUCP: ...!cernvax!cc.imperial.ac.uk!dds London SW7 2BZ JANET: dds@uk.ac.ic.cc