[OSTEP] Introduction

Soeng_dev·2020년 12월 29일
0

Contents

ostep책의 구성은 virtualization, concurrency, persistence 세가지 요소를 중심으로 전개됨

- Virtualization

​virtualization을 통해 컴퓨터의 물리적인 메모리공간을 각각의 프로그램에 할당해줌
동시에 여러 프로그램 작동가능한건 os의 virtualization덕분
각각의 프로그램은 os의 virtualization에 의해 각 프로그램별로 할당된 고유한 가상 메모리 공간을 부여받는다.(aslr disalbed 되어있을 때)
이때 프로그램의 포인터가 출력하는 메모리주소는 해당 프로그램의 고유한 가상메모리 공간상의 메모리주소이다.(즉, 서로다른 프로그램의 포인터 주소를 출력했을때 같은 메모리가 출력될 수 도 있음, p6 : figure 2.4)

- Concurrency

concurrency는 여러 프로그램이나 한 프로그램 안에서 여러 알고리즘이 동시에 돌아갈 때 최종 결과에 영향을 주지 않는 것을 의미한다.
multi thread에서 예상치 못한 작업 결과(ex : 전역변수 연산, p7,8)등 때문에 concurrency 고려해 줘야함

※concurrency vs parallelism 읽어보면 좋은 글
https://12bme.tistory.com/184
https://freecontent.manning.com/concurrency-vs-parallelism/

- Persistence

​os는 data의 persistence 를 위해 file system을 통해 하드웨어(hdd,sdd 등등)에 파일 내용을 저장함
시스템 콜 등을 통해 이를 구현

- Design goals

abstraction
make os esier to use and more convinient

performance
minimize overhead

protection
prevent os and program from being harmed or killed by certain malicious program

reliability
run non-stop

and energy-efficiency, security, mobility ,etc

- OS발전사

처음엔 os가 라이브러리의 형태로만 존재
hardware에 대한 접근 권한의 protection 목적으로 system call 이 발명 됨

컴퓨터 자원의 효율적 이용을 위해 multiprogramming 이 화두가 되고 memory protection, concurrency 등이 중요한 이슈가 됨

이맘때 쯤 unix 운영체제가 발명 됨, 다른 운영체제의 장점을 계승하면서 더 간단하고 사용하기 쉽게 만듬
(쉘을 이용한 메타 프로그래밍 등등)

personal computer의 시대로 넘어오면서 이전에 했던 잘못을 반복함.
이에 protection등의 문제가 불거지고 해결하는 과정에서 os기술이 크게 도약


배경지식

- C 문법

printf vs fprintf

printf는 표준출력장치(주로 모니터)에만 출력
fprintf는 파일포인터를 인자로 받아 해당 파일포인터(스트림)에 출력
(파일포인터를 특정 파일로 지정하면 파일에 저장가능)
파일 디스크립터 파일 포인터 차이
파일 포인터는 C라는 언어에서 제정한 표준 입출력 객체이며, 파일 디스크립터는 OS에서 제공하는 입출력 식별자
파일 포인터가 가리키는 FILE 구조체의 멤버로 파일 디스크립터가 포함되있음
(참고 : https://bit.ly/33J7dvW)

stderr vs stdout

stderr는 버퍼링을 사용하지 않는 반면(null buffering) stdout은 개행문자를 기준으로 버퍼링(line buffering)
(버퍼링의 종류는 버퍼가 꽉차면 버퍼링하는 full buffering 까지 종류가 3가지)

volatile 변수

volatile 로 선언한 변수는 컴파일 시 최적화에서 제외됨
(참고 : https://dojang.io/mod/page/view.php?id=749)

pthread

c언어에서 프로그램에 쓰레드를 구현할 때 자주쓰는 함수
(참고 : https://bitsoul.tistory.com/156)

- 개념

posix

병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 표준 API

thread

어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
(참고 : 프로세스 vs 스레드 https://bit.ly/36GinDN)

profile
Software Engineer

0개의 댓글