CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe...
-
Upload
karen-hart -
Category
Documents
-
view
224 -
download
0
Transcript of CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe...
![Page 1: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/1.jpg)
CIS 415 – Operating System (Lab)
CIS 415 Lab 1
Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher
Dave Tian
![Page 2: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/2.jpg)
Lab/Office Hour
Lab:
8:00 ~ 8:50 AM Wed/Thurs Klamath 026
Office:
9:00 ~ 10:00 AM Wed/Thurs DES 224
![Page 3: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/3.jpg)
Guideline
C Programming Language UNIX/Linux commands Make Version Control
![Page 4: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/4.jpg)
C Programming Language – Hello World
gcc -o hello hello.c ./hello
/* you generally want to * include stdio.h and * stdlib.h * */#include <stdio.h>#include <stdlib.h>
int main (void){ printf(“Hello World\n”); exit(0);}
![Page 5: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/5.jpg)
C Programming Language – Standard Header Files
stdio.h – file and console (also a file) IO: perror, printf, open, close, read, write, scanf, etc.
stdlib.h - common utility functions: malloc, calloc, strtol, atoi, etc
string.h - string and byte manipulation: strlen, strcpy, strcat, memcpy, memset, etc.
ctype.h – character types: isalnum, isprint, isupport, tolower, etc.
errno.h – defines errno used for reporting system errors
math.h – math functions: ceil, exp, floor, sqrt, etc.
signal.h – signal handling facility: raise, signal, etc
stdint.h – standard integer: intN_t, uintN_t, etc
time.h – time related facility: asctime, clock, time_t, etc.
![Page 6: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/6.jpg)
C Programming Language – C Preprocessor
The C preprocessor permits you to define simple macros that are evaluated and expanded prior to compilation.
Commands begin with a ‘#’. Abbreviated list:
#define : defines a macro
#undef : removes a macro definition
#include : insert text from file
#if : conditional based on value of expression
#ifdef : conditional based on whether macro defined
#ifndef : conditional based on whether macro is not defined
#else : alternative
#elif : conditional alternative
defined() : preprocessor function: 1 if name defined, else 0#if defined(__NetBSD__)
![Page 7: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/7.jpg)
C Programming Language – Types and Operators
Basic data types
Types: char, int, float and double
Qualifiers: short, long, unsigned, signed, const
Constant: 0x1234, 12, “Some string”
Enumeration:
Names in different enumerations must be distinct
enum WeekDay_t {Mon, Tue, Wed, Thur, Fri};enum WeekendDay_t {Sat = 0, Sun = 4};
Arithmetic: +, -, *, /, %
prefix ++i or --i ; increment/decrement before value is used
postfix i++, i--; increment/decrement after value is used
Relational and logical: <, >, <=, >=, ==, !=, &&, ||
Bitwise: &, |, ^ (xor), <<, >>, ~(ones complement)
![Page 8: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/8.jpg)
C Programming Language – Operator Precedence
Tokens Operator Class
Precedence
Associates
names,literals simple tokens primary
16
n/a
a[k] subscripting postfix left-to-right
f(...) function call postfix left-to-right
. direct selection postfix left-to-right
-> indirect selection postfix left to right
++ -- increment, decrement postfix left-to-right
(type){init} compound literal postfix left-to-right
++ -- increment, decrement prefix right-to-left
sizeof size unary right-to-left
~ bitwise not unary right-to-left
! logical not unary right-to-left
- + negation, plus unary right-to-left
& address of unary right-to-left
* indirection(dereference) unary right-to-left
Tokens Operator Class
Precedence
Associates
(type) casts unary 14 right-to-left
* / % multiplicative binary 13 left-to-right
+ - additive binary 12 left-to-right
<< >> left, right shift binary 11 left-to-right
< <= > >= relational binary 10 left-to-right
== != equality/ineq. binary 9 left-to-right
& bitwise and binary 8 left-to-right
^ bitwise xor binary 7 left-to-right
| bitwise or binary 6 left-to-right
&& logical and binary 5 left-to-right
|| logical or binary 4 left-to-right
?: conditional ternary 3 right-to-left
= += -=*= /= %=&= ^= |=<<= >>=
assignment binary 2 right-to-left
, sequential eval. binary 1 left-to-right
![Page 9: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/9.jpg)
C Programming Language – Structures and Unions
structures
struct MyPoint {int x, int y};
typedef struct MyPoint MyPoint_t;
MyPoint_t point, *ptr;
point.x = 0;point.y = 10;
ptr = &point; ptr->x = 12; ptr->y = 40;
unions
union MyUnion {int x; MyPoint_t pt; struct {int 3; char c[4]} S;};
union MyUnion x;
Can only use one of the elements. Memory will be allocated for the largest element
![Page 10: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/10.jpg)
C Programming Language – if/else
if (a < 10)
printf(“a is less than 10\n”);
else if (a == 10)
printf(“a is 10\n”);
else
printf(“a is greater than 10\n”);
If you have compound statements then use brackets (blocks)
if (a < 4 && b > 10) { c = a * b; b = 0; printf(“a = %d, a\’s address = 0x%08x\n”, a, (uint32_t)&a);} else { c = a + b; b = a;}
These two statements are equivalent:
if (a) x = 3; else if (b) x = 2; else x = 0;
if (a) x = 3; else {if (b) x = 2; else x = 0;}
Is this correct?
if (a) x = 3; else if (b) x = 2;else (z) x = 0; else x = -2;
![Page 11: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/11.jpg)
C Programming Language - switch
int c = 10;
switch (c) {
case 0:
printf(“c is 0\n”);
break;
...
default:
printf(“Unknown value of c\n”);
break;
}
What if we leave the break statement out?
Do we need the final break statement on the default case?
![Page 12: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/12.jpg)
C Programming Language - loops
for (i = 0; i < MAXVALUE; i++) { dowork();}
while (c != 12) { dowork();}
do { dowork();} while (c < 12);
flow control
break – exit innermost loop
continue – perform next iteration of loop
Note, all these forms permit one statement to be executed. By enclosing in brackets we create a block of statements.
![Page 13: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/13.jpg)
C Programming Language - functions
Always use function prototypesint myfunc (char *, int, struct MyStruct *);int myfunc_noargs (void);void myfunc_noreturn (int i);
C and C++ are call by value, copy of parameter passed to function
C++ permits you to specify pass by reference
if you want to alter the parameter then pass a pointer to it (or use references in C++)
If performance is an issue then use inline functions, generally better and safer than using a macro. Common convention
define prototype and function in header or name.i file
static inline int myinfunc (int i, int j);
static inline int myinfunc (int i, int j) { ... }
![Page 14: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/14.jpg)
C Programming Language - functions
Always use function prototypesint myfunc (char *, int, struct MyStruct *);int myfunc_noargs (void);void myfunc_noreturn (int i);
C and C++ are call by value, copy of parameter passed to function
C++ permits you to specify pass by reference
if you want to alter the parameter then pass a pointer to it (or use references in C++)
If performance is an issue then use inline functions, generally better and safer than using a macro. Common convention
define prototype and function in header or name.i file
static inline int myinfunc (int i, int j);
static inline int myinfunc (int i, int j) { ... }
![Page 15: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/15.jpg)
C Programming Language – Array and Pointer
0x3dc0x3d8
0x3cc0x3c80x3c40x3c0
Note: The compiler converts z[1] or *(z+1) toValue at address (Address of z + sizeof(int));
In C you would write the byte address as: (char *)z + sizeof(int);
or letting the compiler do the work for you (int *)z + 1;
Step 1:int main (int argc, argv) {
int x = 4;int *y = &x;int *z[4] = {NULL, NULL, NULL, NULL};int a[4] = {1, 2, 3, 4};
...
0x3bc0x3b80x3b40x3b0
0x3d40x3d0
z[3]z[2]z[1]z[0]a[3]a[2]
a[1]a[0]
40x3dc
00004321
NANA
xy
![Page 16: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/16.jpg)
C Programming Language – Array and Pointers (II)
Step 1:int main (int argc, argv) {
int x = 4;int *y = &x;int *z[4] = {NULL, NULL, NULL,
NULL};int a[4] = {1, 2, 3, 4};
Step 2: Assign addresses to array Zz[0] = a; // same as &a[0];z[1] = a + 1; // same as &a[1];z[2] = a + 2; // same as &a[2];z[3] = a + 3; // same as &a[3];
40x3dc
0x3dc0x3d8
0x3bc0x3b80x3b40x3b0
0x3cc0x3c80x3c40x3c00x3bc0x3b80x3b40x3b0
4321
NA 0x3d40x3d0NA
xy
![Page 17: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/17.jpg)
UNIX/Linux Commands – File Operation
touch mkdir cp mv chmod ls cat/dog? rm
![Page 18: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/18.jpg)
UNIX/Linux Commands – Process, Performance and Debug
ps top netstat ifconfig uname ltrace/strace valgrind sysctl
![Page 19: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/19.jpg)
UNIX/Linux Commands - Utilities
date who grep find sed awk head/tail tar man
![Page 20: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/20.jpg)
UNIX/Linux Commands – Kernel Module
lsmod insmod rmmod dmesg
![Page 21: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/21.jpg)
UNIX/Linux Commands - Others
vi/vim emacs gcc gdb objdump make ssh/scp wget/curl
![Page 22: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/22.jpg)
UNIX/Linux Commands – Build from source
gunzip XXX.gz bunzip2 XXX.bz2 tar -xvf XXX.tar cd XXX ./configure make make install ...README
![Page 23: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/23.jpg)
Make - Intro
Manually compile
gcc -Wall -g -o helloX hello1.c hello2.c hello3.c ...
g++ -Wall -g -o helloY hello1.cpp hello2.cpp hello3.cpp... When the project is NOT trivial or code change (bug fix)
is frequent... YOU have to REPEAT the command for times and times!
![Page 24: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/24.jpg)
Make – DRY!
Write a Makefile Specify the source Specify the target Specify the dependency Specify the compiler options Specify the other actions ...Use TAB! Run 'make'/'make hello'/'make -f myHelloMakeFile'/'make
all'/'make clean'...
![Page 25: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/25.jpg)
Make – Example 1
all: g++ main.cpp hello.cpp factorial.cpp -o hello
![Page 26: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/26.jpg)
Make – Example 2
all: hello
hello: main.o factorial.o hello.o g++ main.o factorial.o hello.o -o hello
main.o: main.cpp g++ -c main.cpp
factorial.o: factorial.cpp g++ -c factorial.cpp
hello.o: hello.cpp g++ -c hello.cpp
clean: rm -rf *o hello
![Page 27: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/27.jpg)
Make – Example 2
all: hello
hello: main.o factorial.o hello.o g++ main.o factorial.o hello.o -o hello
main.o: main.cpp g++ -c main.cpp
factorial.o: factorial.cpp g++ -c factorial.cpp
hello.o: hello.cpp g++ -c hello.cpp
clean: rm -rf *o hello
![Page 28: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/28.jpg)
Make – Example 3
# I am a comment, and I want to say that the variable CC will be# the compiler to use.CC=g++
# Hey!, I am comment number 2. I want to say that CFLAGS will be the# options I'll pass to the compiler.CFLAGS=-c -Wall
all: hello
hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello
main.o: main.cpp $(CC) $(CFLAGS) main.cpp
factorial.o: factorial.cpp $(CC) $(CFLAGS) factorial.cpp
hello.o: hello.cpp $(CC) $(CFLAGS) hello.cppclean: rm -rf *o hello
![Page 29: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/29.jpg)
Version Control - Intro
Version Control
The way to control different version of software...
The way to provide convenience for team work...
The way to implement an online code repos service...
CVS
SVN
Git
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
![Page 30: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/30.jpg)
Version Control - SVN
svnadmin create <repo> svn co <repo address> - Checkout a repo svn add <filename> - Add a file to a repo svn ci –m “commit message” – Check into a repo svn diff – See changes svn log <filename> - See commit messages svn help <command> - Display SVN help
![Page 31: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/31.jpg)
Version Control - Git
git init – initialize the current directory to be a git repo
git checkout <repo | revision | branch> - checks out a repo, revision, or branch
git add <filename> – add a file to repo git commit –m “commit message” – commits any
changes git log – display commits git branch – create a new branch git clone <repo> - copy a repo
![Page 32: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/32.jpg)
Version Control – Git (Server side, ix)
ssh [email protected] mkdir my_project.git cd my_project.git git init --bare git update-server-info #If http is desired
![Page 33: CIS 415 – Operating System (Lab) CIS 415 Lab 1 Slides based on Fred Kuhns, Kevin Butler and Joe Pletcher Dave Tian.](https://reader036.fdocuments.net/reader036/viewer/2022062408/56649e6f5503460f94b6d044/html5/thumbnails/33.jpg)
Version Control – Git (Client side, local)
Install git on UNIX/Linux/Windows/MacOS cd your_project git init git add hello.c # Or use * for all files git commit -m “Well, this is my first using git...” git remote add origin [email protected]
:my_project.git git push -u origin master