Week 4 - Friday.  What did we talk about last time?  Some extra systems programming stuff  Scope.

Slides:



Advertisements
Similar presentations
Programs in Memory Bryce Boe 2012/08/29 CS32, Summer 2012 B.
Advertisements

Slide 2-1 Copyright © 2004 Pearson Education, Inc. Operating Systems: A Modern Perspective, Chapter 2 Using the Operating System 2.
CSE 303 Lecture 16 Multi-file (larger) programs
Program Development Tools The GNU (GNU’s Not Unix) Toolchain The GNU toolchain has played a vital role in the development of the Linux kernel, BSD, and.
Linking & Loading CS-502 Operating Systems
Prof. Necula CS 164 Lecture 141 Run-time Environments Lecture 8.
Week 5 - Wednesday.  What did we talk about last time?  Arrays.
User-Level Memory Management in Linux Programming
Week 7 - Friday.  What did we talk about last time?  Allocating 2D arrays.
CS 536 Spring Run-time organization Lecture 19.
3/17/2008Prof. Hilfinger CS 164 Lecture 231 Run-time organization Lecture 23.
Memory Management. 2 How to create a process? On Unix systems, executable read by loader Compiler: generates one object file per source file Linker: combines.
CS 300 – Lecture 23 Intro to Computer Architecture / Assembly Language Virtual Memory Pipelining.
C and Data Structures Baojian Hua
Run-time Environment and Program Organization
7/13/20151 Topic 3: Run-Time Environment Memory Model Activation Record Call Convention Storage Allocation Runtime Stack and Heap Garbage Collection.
Memory Layout C and Data Structures Baojian Hua
Processes in Unix, Linux, and Windows CS-502 Fall Processes in Unix, Linux, and Windows CS502 Operating Systems (Slides include materials from Operating.
Processes CS 416: Operating Systems Design, Spring 2001 Department of Computer Science Rutgers University
Software Development and Software Loading in Embedded Systems.
Operating Systems Concepts 1. A Computer Model An operating system has to deal with the fact that a computer is made up of a CPU, random access memory.
Process. Process Concept Process – a program in execution Textbook uses the terms job and process almost interchangeably A process includes: – program.
1 uClinux course Day 3 of 5 The uclinux toolchain, elf format and ripping a “hello world”
Week 4 - Friday.  What did we talk about last time?  Some extra systems programming stuff  Scope.
Week 4 - Wednesday.  What did we talk about last time?  Evil: break, continue, goto  System calls  Functions.
Chapter 3.1:Operating Systems Concepts 1. A Computer Model An operating system has to deal with the fact that a computer is made up of a CPU, random access.
System Calls 1.
Lecture 22 Miscellaneous Topics 4 + Memory Allocation.
Operating System Chapter 7. Memory Management Lynn Choi School of Electrical Engineering.
Copyright 2001 Oxford Consulting, Ltd1 January Storage Classes, Scope and Linkage Overview Focus is on the structure of a C++ program with –Multiple.
Section 3.1: Operating Systems Concepts 1. A Computer Model An operating system has to deal with the fact that a computer is made up of a CPU, random.
Compiler Construction
Adv. UNIX: large/131 Advanced UNIX v Objectives of these slides: –learn how to write/manage large programs consisting of multiple files, which.
Old Chapter 10: Programming Tools A Developer’s Candy Store.
Chapter 8 – Main Memory (Pgs ). Overview  Everything to do with memory is complicated by the fact that more than 1 program can be in memory.
Topic 2d High-Level languages and Systems Software
Chapter 4 Memory Management Virtual Memory.
Processes Introduction to Operating Systems: Module 3.
CS 153 Design of Operating Systems Spring 2015 Lecture 5: Processes and Threads.
ECE 103 Engineering Programming Chapter 36 C Storage Classes Herbert G. Mayer, PSU CS Status 8/4/2014 Initial content copied verbatim from ECE 103 material.
Processes CS 6560: Operating Systems Design. 2 Von Neuman Model Both text (program) and data reside in memory Execution cycle Fetch instruction Decode.
1 CS503: Operating Systems Spring 2014 Part 0: Program Structure Dongyan Xu Department of Computer Science Purdue University.
Paging (continued) & Caching CS-3013 A-term Paging (continued) & Caching CS-3013 Operating Systems A-term 2008 (Slides include materials from Modern.
Programming Fundamentals. Topics to be covered Today Recursion Inline Functions Scope and Storage Class A simple class Constructor Destructor.
Week 5 - Monday.  What did we talk about last time?  Processes  Lab 4.
CSc 453 Linking and Loading
CS252: Systems Programming Ninghui Li Based on Slides by Gustavo Rodriguez-Rivera Topic 2: Program Structure and Using GDB.
Memory Management. 2 How to create a process? On Unix systems, executable read by loader Compiler: generates one object file per source file Linker: combines.
Week 4 - Friday CS222.
Week 4 - Wednesday CS222.
Programs – Loading and Running an Executable
ENERGY 211 / CME 211 Lecture 25 November 17, 2008.
Dynamic Memory Allocation
Week 5 - Monday CS222.
Run-time organization
Process Realization In OS
Software Development with uMPS
Topic 2e High-Level languages and Systems Software
Lecture 5: Process Creation
Computer Organization & Compilation Process
More examples How many processes does this piece of code create?
Memory Allocation CS 217.
Programs – Loading and Running an Executable
Program Execution in Linux
Lecture 7: Flexible Address Translation
CSE 153 Design of Operating Systems Winter 2019
Computer Organization & Compilation Process
RUN-TIME STORAGE Chuen-Liang Chen Department of Computer Science
SPL – PS1 Introduction to C++.
Week 7 - Friday CS222.
Presentation transcript:

Week 4 - Friday

 What did we talk about last time?  Some extra systems programming stuff  Scope

Unix never says "please." Rob Pike Unix never says "please." Rob Pike  It also never says:  "Thank you"  "You're welcome"  "I'm sorry"  "Are you sure you want to do that?"

 What if you want to use a global variable declared in another file?  No problem, just put extern before the variable declaration in your file  There should only be one true declaration, but there can be many extern declarations referencing it  Function prototypes are implicitly extern int count; extern int count; file1.c file2.c file3.c program.c

 The static keyword causes confusion in Java because it means a couple of different (but related) things  In C, the static keyword is used differently, but also for two confusing things  Global static declarations  Local static declarations

 When the static modifier is applied to a global variable, that variable cannot be accessed in other files  A global static variable cannot be referred to as an extern in some other file  If multiple files use the same global variable, each variable must be static or an extern referring to a single real variable  Otherwise, the linker will complain that it's got variables with the same name

 You can also declare a static variable local to a function  These variables exist for the lifetime of the program, but are only visible inside the method  Some people use these for bizarre tricks in recursive functions  Try not to use them!  Like all global variables, they make code harder to reason about  They are not thread safe

#include void unexpected() { static int count = 0; count++; printf("Count: %d", count); } int main() { unexpected(); //Count: 1 unexpected(); //Count: 2 unexpected(); //Count: 3 return 0; } #include void unexpected() { static int count = 0; count++; printf("Count: %d", count); } int main() { unexpected(); //Count: 1 unexpected(); //Count: 2 unexpected(); //Count: 3 return 0; }

 You can also use the register keyword when declaring a local variable  It is a sign to the compiler that you think this variable will be used a lot and should be kept in a register  It's only a suggestion  You can not use the reference operator (which we haven't talked about yet) to retrieve the address of a register variable  Modern compilers are better at register allocation than humans usually are register int value;

 All real programs are written in multiple files  To compile such files, do the following  Create a header file (with a.h extension) for every file that contains prototypes for functions you're going to use in other files  #include those header files in every file that uses them  When you run gcc, put all the.c files needed on the line at the same time

 Your main() function and core program is in a file called program.c  You have files called networking.c and graphics.c that have networking and graphics functions that your program uses  You should have headers called networking.h and graphics.h (names don't have to match, but it is better if they do)  At the top of program.c should be:  To run gcc you type: #include "networking.h" #include "graphics.h" #include "networking.h" #include "graphics.h" gcc program.c networking.c graphics.c -o program

 You can compile a file into object code without linking it into an executable  Produces a.o file  That way, you can compile all the pieces separately and then link them later  This can be more efficient if you are updating some of the code but not all of it  To compile but not link, use gcc -c  We could compile the previous example as follows gcc –c program.c gcc –c networking.c gcc –c graphics.c gcc program.o networking.o graphics.o -o program gcc –c program.c gcc –c networking.c gcc –c graphics.c gcc program.o networking.o graphics.o -o program

 Now that we're talking about compiling multiple files, a makefile really makes (ha, ha) sense all: program program: program.o networking.o graphics.o gcc program.o networking.o graphics.o -o program program.o: program.c networking.h graphics.h gcc –c program.c networking.o: networking.c gcc –c networking.c graphics.o: graphics.c gcc –c graphics.c clean: rm -f *.o program all: program program: program.o networking.o graphics.o gcc program.o networking.o graphics.o -o program program.o: program.c networking.h graphics.h gcc –c program.c networking.o: networking.c gcc –c networking.c graphics.o: graphics.c gcc –c graphics.c clean: rm -f *.o program

 Recall that a process is a running program  Multiple copies of a single program can be running as different processes  A program is a binary file (generated by the compiler)  Formats used to be:  Assembly output (where the name a.out comes from)  COFF (Common Object File Format)  Now they are usually ELF (Executable and Linking Format)  Details about binary formats are more interesting when you're writing a compiler

 Every running process has a process ID (PID)  You can find out the PID of the currently executing code by calling the getpid() function  Every process also has a parent process (which has a parent PID)  Get that by calling getppid()  The parent is the process that created the current process  This parent-child relationship forms a tree all the way back to the first process init, which always has PID 1

 Layout for 32-bit architecture  Could only address 4GB  Modern layouts often have random offsets for stack, heap, and memory mapping for security reasons Text Data BSS Heap Memory Mapping Stack Kernel Space 1GB 3GB 0xc x x x Only for Linux kernel Memory for function calls Addresses for memory mapped files Dynamically allocated data Uninitialized globals Initialized globals Program code

 Those addresses (from 0 to 4GB) are virtual addresses  Each program sees an address space stretching from 0 to 4GB  The OS transparently manages how those addresses are mapped to physical memory  The virtual address space is divided up into pages  Each page can be in memory or sitting on disk  Pages are typically moved into memory only when needed

 It isolates processes from each other  Since they have different address spaces, it is harder for one program to read the data out of another  Processes can share the same memory without inadvertently trampling on each other  Since paging is controlled by the OS, pages can be marked read-only  Programmers don't need to worry about the actual layout of memory  Programs can load faster because only part of them needs to be put into RAM

 ps gives a snapshot of the current processes running  top gives repeatedly updated information about the processes running  The kill command lets you end a process  You have to have sufficiently high privileges to do so

 Arrays

 Read K&R chapter 5  Keep working on Project 2