Dr. Mark Humphrys

School of Computing. Dublin City University.

Home      Blog      Teaching      Research      Contact

My big idea: Ancient Brain


CA114      CA170

CA668      CA669      Projects


Programs sit on disk. Maybe not run for years.
Process - An instance of the program running.

1 user with 2 instances of text editor running - 1 program, 2 processes, each with their own memory space.
100 users with 100 instances of web browser running, all running the same copy from /usr/bin/firefox - 1 program, 100 processes, each with their own memory space.

Windows processes (Task Manager)

List processes in Task Manager.
This is in fact Windows XP. From here.

Process State

Process state
Loaded from disk (permanent, power-off storage) into memory (RAM).
Recall Memory hierarchy

Starts running.
May pause when doing disk I/O, waiting on user event, etc. Does not always have work for CPU to do.
May pause for long time.

READY to RUNNING - Short-term (CPU) scheduler decides if you can run now.
RUNNING to WAITING - I/O or event wait.
WAITING to READY - I/O or event completion.

CPU scheduling (Time-slicing)



2 (or more) flows of control in the same process. 2 (or more) instruction counters. Same memory (same data and code space).

e.g. Web server - Each request is a separate thread, all running in parallel until request completed.
e.g. Web browser - multiple windows downloading at same time. Each is a separate thread in same process.

Multiple cores

Modern computers have multiple cores (multiple processing units, executing instructions in parallel).

Modern OS will schedule threads and processes across multiple cores.

Processor affinity - The idea that once a process or thread starts running on one core, it is often more efficient to leave it there (and its data in the core's cache memory) rather than change cores.

On Linux we can look at multiple core use from command-line using ps and top and other commands:

Display number of cores available:
$ nproc

Run process using core n (where n is 0 to 3 here):
$ taskset -c n prog

See what processes are currently using what cores:
$ ps -Ao user,pid,ppid,comm,psr 

root         1     0 init              0
root         2     0 kthreadd          2
root         3     2 ksoftirqd/0       0
root        25     2 watchdog/3        3
root       328     1 udevd             3
humphrys 29858 29855 sshd              0
humphrys 29859 29858 csh               0
humphrys 32373 29859 ps                1
humphrys 32374 29859 grep              1

# PSR will be 0 to 3 here 

Query if process is bound to a core:

$ taskset -p 3
pid 3's current affinity mask: 1

$ taskset -p 25
pid 25's current affinity mask: 8

# 0001 (1) - bound to core 0 (see process 3 command /0)
# 0010 (2) - bound to core 1
# 0100 (4) - bound to core 2
# 1000 (8) - bound to core 3 (see process 25 command /3)

$ taskset -p 1
pid 1's current affinity mask: f

# 1111 (f) - can run on all 4 cores, not tied to any core 

See load on different cores:
$ top
(and then press 1)

Event logging

Event logging: The OS logs (in a file) events connected to processes.

User logins on Unix/Linux

ancientbrain.com      w2mind.org      humphrysfamilytree.com

On the Internet since 1987.

Wikipedia: Sometimes I link to Wikipedia. I have written something In defence of Wikipedia. It is often a useful starting point but you cannot trust it. Linking to it is like linking to a Google search. A starting point, not a destination. I automatically highlight in red all links to Wikipedia and Google search and other possibly-unreliable user-generated content.