protected void collectOperatingSystemCounters(Map scalars) {
		synchronized(this) {
		    /**
		     * The status values for a Linux process, that is the values that come from /proc/self/stat.
		     * The names of the variables match the man proc page.
		     */
		    StringTokenizer st= readTokens("/proc/self/stat", false); //$NON-NLS-1$
		    if (st != null) {
				st.nextToken();		// int pid;		// Process id.
				st.nextToken();						// String comm;		// The command name.
				st.nextToken();						// String state;
				st.nextToken();		// int ppid;		// Parent process id. */
				st.nextToken();		// int pgrp;		// Process group. */    	
				st.nextToken();		// int session;
				st.nextToken();		// int ttry_nr;
				st.nextToken();		// int tpgid;
				st.nextToken();		// long flags;
				long minflt = Long.parseLong(st.nextToken());	// Minor page faults (didn't need to load a page from disk). */
				st.nextToken();		// long cminflt;	// Minor page faults for the process and it's children. */
				long majflt = Long.parseLong(st.nextToken());	// Major page faults. */
				st.nextToken();		// long	cmajflt;	// Major page faults for the process and it's children. */
				long utime = Long.parseLong(st.nextToken());	// User time in jiffies. */
				long stime = Long.parseLong(st.nextToken());	// System time in jiffies. */ 	
				st.nextToken();		// long cutime;		// User time for the process and it's children. */
				st.nextToken();		// long cstime;		// System time for the process and it's children. */
	
				//addScalar(scalars, InternalDimensions.USER_TIME, utime*JIFFIES);			
				addScalar(scalars, InternalDimensions.KERNEL_TIME, stime*JIFFIES);			
				addScalar(scalars, InternalDimensions.CPU_TIME, (utime+stime)*JIFFIES);			
				addScalar(scalars, InternalDimensions.SOFT_PAGE_FAULTS, minflt);			
				addScalar(scalars, InternalDimensions.HARD_PAGE_FAULTS, majflt);
		    }

		    /**
		     * The status memory values values for a Linux process, that is the values that come from /proc/self/statm.
		     * The names of the variables match the man proc page.
		     */
			st= readTokens("/proc/self/statm", false); //$NON-NLS-1$
			if (st != null) {
				st.nextToken(); 	// int size;				// Size of the process in pages
				int resident= Integer.parseInt(st.nextToken());	// Resident size in pages.
				st.nextToken(); 	// int shared;				// Shared size in pages.
				int trs= Integer.parseInt(st.nextToken()); 		// Text (code) size in pages.
				int drs= Integer.parseInt(st.nextToken()); 		// Data/Stack size in pages.
				int lrs= Integer.parseInt(st.nextToken()); 		// Library size in pages.
				// st.nextToken();		// int dt;				// Dirty pages.
	
				addScalar(scalars, InternalDimensions.WORKING_SET, resident*PAGESIZE);		
				addScalar(scalars, InternalDimensions.TRS, trs*PAGESIZE);			
				addScalar(scalars, InternalDimensions.DRS, drs*PAGESIZE);			
				addScalar(scalars, InternalDimensions.LRS, lrs*PAGESIZE);
			}

			Properties io = readStatsProperties("/proc/self/io"); //$NON-NLS-1$
			if (io != null) {
			    long readBytes = Long.parseLong(io.getProperty("rchar")); //$NON-NLS-1$
			    long writeBytes = Long.parseLong(io.getProperty("wchar")); //$NON-NLS-1$
                addScalar(scalars, InternalDimensions.RCHAR, readBytes);      
                addScalar(scalars, InternalDimensions.WCHAR, writeBytes);      
			}

			long currentTime= System.currentTimeMillis();
			if (!PerformanceTestPlugin.isOldDB())
				addScalar(scalars, InternalDimensions.SYSTEM_TIME, currentTime);
			
			if (fgHasElapsedTime) {
				if (fgStartupTime == 0) {
					String t= System.getProperty("eclipse.startTime"); //$NON-NLS-1$
					if (t != null) {
						try {
							fgStartupTime= Long.parseLong(t);
						} catch (NumberFormatException e) {
							fgHasElapsedTime= false;
						}
					} else
						fgHasElapsedTime= false;
				}
				if (fgHasElapsedTime)
					addScalar(scalars, InternalDimensions.ELAPSED_PROCESS, currentTime-fgStartupTime);
			}
			
			super.collectOperatingSystemCounters(scalars);
		}
	}