SlideShare a Scribd company logo
1 of 78
Computer System
OS + SYSTEM PROGRAMMING
#1 개론
진행 방향
• 시스템?
• 컴퓨터에서 마이크로프로세서와 그와 관련된 집적 회로(IC) 칩과 회로, 입력 장치(키보드, 마우스, 디스크 구동 장치), 출력 장치(모니터, 디스크 구동 장
치), 그리고 주변 장치(인쇄기, 모뎀) 등으로 구성되는 하드웨어 세트
• 시스템 프로그램
• 시스템을 제어하는 프로그램, 컴퓨터 시스템을 동작시키는 프로그램
• OS에게 서비스를 요청하는 방식으로 하드웨어를 동작 시킨다.
• 대부분의 응용 프로그램은 시스템 프로그램이지만, 여기서는 조금 더 하드웨어와 OS를 고려하는 프로그램을 시스템 프로그램이라 말하겠다.
• 시스템 프로그래밍을 잘 하기 위해서는 기본적으로 OS를 알고 있어야 함
• OS
• 하드웨어를 제어하고 컴퓨터 자원을 관리하며, 컴퓨터 사용을 편리하게 해 주고 응용 프로그램의 수행을 도와주며, 사용자와 하드웨어 사이의 매개체 역
할을 하는 프로그램
• 해킹공부에 필요한 시스템 배경지식에 대해 공부하는 것이 목적
• 학교 수업에서 다루는 부분을 생략할 수도 있음
진행 방향
• 큰 틀은 컴퓨터 시스템 책을 따라 감
• Computer Systems – A programmer’s Perspective (전공 교재)
• OS와 겹치는 내용은 컴퓨터 시스템 책보다 깊이 들어 감
• OS 참고서적
• Modern Operating Systems -fourth edition (전공 교재)
• 운영체제론(위 책의 번역본, 옛날판)
진행 방향
• OS
• 종류는 크게 UNIX와 Windows가 있다.
• 이 둘은 매우 다름
• 앞으로 배울 OS의 기본적인 일은 어떤 OS라도 처리해주지만, 각자 스타일이 다르다.
• 즉, 구현 세부 사항은 매우 다르다.
• OS에 대한 내용은 기본적으로 UNIX를 기준으로 할 것임
• 비슷한 개념이 Windows에도 적용이 됨
컴퓨터 시스템 책 내용
• 1장 : 개론
• 2장 : 컴퓨터에서의 산술연산
• 3장 : 고급언어 -> 어셈블리어 패턴
• 4장 : CPU의 구조
• 5장 : 최적화
• 6장 : 메모리의 구조
• 7장 : 링킹 과정 (다른 소스 파일과 합치기, 라이브러리 쓸 수 있게 하기)
• 8장 : 예외 처리
• 9장 : 가상 메모리
• 10장 : 파일 I/O
• 11장 : 네트워크 프로그래밍 (네트워크 공부 후 할 계획)
• 12장 : 동시성 프로그래밍
● : OS +
● : 안 다룸
OS 다룰 내용
• 추상화
• 프로세스
• 어떻게 한 프로세스가 물리 메모리를 독점하는 것처럼 보이게 하는가
• 어떻게 동시에 많은 프로그램을 실행하게 하는가
• 가상 메모리
• 어떻게 메모리를 관리하는가
• 파일 시스템
• 파일이 어떻게 하드웨어에 저장되는가
• 폴더는 어떻게 저장되고 폴더 속에 어떻게 파일이 저장되는가
• 하드웨어 자원 관리
• 어떻게 하드웨어를 적절히 나눠 쓰게 하는가
• System call 등 OS가 제공하는 서비스
목차
• 컴퓨터 시스템 1장 : 개론 + OS 개론 //컴퓨터 시스템
• 정보는 비트와 컨텍스트로 이루어진다 //1.1장
• 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다 //1.2장
• 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다 //1.3장
• 프로그램을 실행하면 무슨 일이 생길까? //1.4장
• 컴퓨터의 성능을 높이는 법 : 캐시 //1.5장
• 저장장치들은 계층구조를 이룬다 //1.6장
• 운영체제는 뭘 할까? //1.7장
• 시스템은 네트워크를 사용하여 다른 시스템과 통신한다 //1.8장
• 동시성과 병렬성 //1.9장
• 부록
• 참고 사이트
정보는 비트와 컨텍스트로 이루어진다
헥사 에디터로 hello0라 쓰고 확장자를 mp3로 저장했다.
어떤 일이 일어날까?
정보는 비트와 컨텍스트로 이루어진다
더블 클릭하니 자동으로 음악 재생기가 실행된다.
해당 확장자에 default로 사용할 프로그램이
정해져 있기 때문이다. (설정에서 변경 가능)
하지만 정상 실행되지 않는다.
정보는 비트와 컨텍스트로 이루어진다
연결 프로그램을 임의로 변경하여 메모장으로 열어보았다.
Txt확장자가 아님에도 글자가 보인다.
정보는 비트와 컨텍스트로 이루어진다
이번엔 어떤 mp3파일의 확장자를 txt로
바꾸어 보았다.
더블 클릭하면 메모장에서 열리지만
유의미한 문자로는 보이지 않는다.
정보는 비트와 컨텍스트로 이루어진다
이 txt파일의 연결 프로그램을 임의로 변경하여 음악 플레이어로 실행해 보았다.
확장자가 이상하다는 경고창이 뜨긴 하지만 음악은 잘 실행된다.
확장자가 mp3이지만 텍스트 파일임을 가정하고 숫자들을
해석하는 경우 숫자들을 아스키 혹은 유니코드로 해석한다.
아스키 코드에 대응하는 알파벳을 써 보면 의미 있는
텍스트가 나온다.
확장자가 mp3이지만 mp3파일을 위한 형식에 맞지
않아 파일을 재생할 수 없다.
정보는 비트와 컨텍스트로 이루어진다
정보는 비트와 컨텍스트로 이루어진다
텍스트 파일이라 생각하고 숫자들을 해석하는 경우
숫자들을 아스키 혹은 유니코드로 생각하고 해석한다.
Mp3파일은 글씨를 나타내기 위한 정보가 아니므로
아스키 혹은 유니코드로 해석하면 의미 없는 정보가 된다.
확장자가 txt이지만 기존 비트들은 변하지
않았으므로 MP3파일을 해석하는 방식으로 비트를
해석하여 재생할 수 있다.
파일 자체는 똑같이 숫자들의 나열이지만 각자의 목적에 따라 요구하는 해석 방법이 달라진다.
컴퓨터가 보기엔 똑같은 무작위의 숫자 배열이지만 해석에 따라 의미가 생긴다.
정보는 비트와 컨텍스트로 이루어진다
정보는 비트와 컨텍스트로 이루어진다
• 컴퓨터 내의 정보
• 상황에 따라 다르게 해석되는 비트들의 그룹
• 저장 되어있는 비트들은 그저 숫자 덩어리일 뿐이다.
• 숫자를 해석하는 컨텍스트에 의해 그 숫자가 무엇을 의미하는지 결정된다.
• 예)
• 같은 내용의 파일이지만 메모장으로 여는가 음악 플레이어로 여는가에 따라 다르게
해석된다.
정보는 비트와 컨텍스트로 이루어진다
• 파일의 종류는 크게 두 가지
• 텍스트 파일
• 바이너리 파일의 특수한 경우
• 아스키 코드, 유니코드 등에 해당되는 숫자로만 이루어진 파일
• C언어 코드도 텍스트 파일의 일종
• 바이너리 파일
• 텍스트 파일 이외의 파일
• 시스템 입장에서는 텍스트 파일이나 바이너리 파일이나 똑같은 숫자 배열일 뿐임
바이너리 파일
텍스트 파일
정보는 비트와 컨텍스트로 이루어진다
◦ 정보를 표현하고 처리하는 방법
◦ 2장에서 다룰 것
◦ 컴퓨터에서 숫자를 표현하는 방법
◦ 음수, 양수를 비트로 표현하고 계산하는 방법
◦ 소수를 표현하는 방법
◦ …
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 고급 언어로 프로그래밍한 코드가 실행 가능 파일이 되는 과정을 알아보자
• 사람이 알아들을 수 있는 고급 언어(예 : C언어)는 네 단계에 걸쳐 실행 가능 프로그램이 된다
• 전처리, 컴파일, 어셈블, 링크
• 각각 전처리기, 컴파일러, 어셈블러, 링커에 의해 실행
• 이 네 프로그램을 합쳐서 컴파일 시스템이라고 부름
• Text파일인 고급 언어 소스 코드에서 실행 가능한 프로그램인 binary 파일(text보다 광범위한)이 된다.
전처리기 컴파일러
Hello.c Hello.i
어셈블러 링커
Hello.s Hello.exeHello.o
소스 코드
(txt)
수정된
소스 코드
(txt)
어셈블리 코드
(txt)
재배치 기능한
object 프로그램
(binary)
실행 기능한
object 프로그램
(binary)
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 전처리기
• C언어에서 #문자로 시작하는 디렉티브를 처리해 줌
• 주석 제거
전처리기 컴파일러
Hello.c Hello.i
어셈블러 링커
Hello.s Hello.exeHello.o
소스 코드
(txt)
수정된
소스 코드
(txt)
어셈블리 코드
(txt)
재배치 기능한
object 프로그램
(binary)
실행 기능한
object 프로그램
(binary)
• 전처리기만 실행하여 hello.i 파일을 얻었다.
• Include한 헤더파일에 써 있는 내용을 붙였다.
• Define한 NUM을 상수로 대체했다.
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 헤더에는 함수의 원형만 써 있다.
• 실제로 함수 코드를 사용할 수 있도록
하는 일은 Link 과정에서 이루어진다.
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 컴파일러
• 수정된 C언어를 어셈블리어로 번역함
전처리기 컴파일러
Hello.c Hello.i
어셈블러 링커
Hello.s Hello.exeHello.o
소스 코드
(txt)
수정된
소스 코드
(txt)
어셈블리 코드
(txt)
재배치 기능한
object 프로그램
(binary)
실행 기능한
object 프로그램
(binary)
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• hello.i 파일을 컴파일하여 hello.s 파일을 얻었다.
• 붙여진 헤더파일 내용에서 printf 함수의 형태를 얻는다. 그것을 보고 함수에 인자를 넣는 코드를 만들 수 있다.
• 실제 함수 코드가 없기 때문에(라이브러리에 있기 때문에) 함수가 어떤 인자를 요구하는 지 알 수 없다.
• 그것을 알려주기 위해서 함수의 형태(원형)에 대한 정보가 들어있는 헤더를 포함한다.
• 적절한 어셈블리 코드를 만들기 위해 함수 원형에 대한 정보가 필요했다. 어셈블리 코드를 만들었으므로 삭제된다.
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 어셈블러
• 어셈블리어 코드를 기계어로 번역
• 실행 파일의 뼈대를 만듦
• 결과물은 더 이상 text 파일이 아님 (=사람이 읽기 위한 파일이 아님)
• 기계가 읽기 위한 파일
전처리기 컴파일러
Hello.c Hello.i
어셈블러 링커
Hello.s Hello.exeHello.o
소스 코드
(txt)
수정된
소스 코드
(txt)
어셈블리 코드
(txt)
재배치 기능한
object 프로그램
(binary)
실행 기능한
object 프로그램
(binary)
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 빨간 테두리 속에 있는 것이 기계어
코드 영역
• 그 외 부분에는 PE 헤더, data영역 등
실행에 필요한 정보가 있다
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 링커
• 다른 재배치 가능한 object 프로그램과 합침
• 여러 C 파일로 나누어 코딩한 경우
• 다른 C 파일들로 생성한 재배치 가능 object 프로그램과 연결하여 하나의 실행 가능 object 프로그램을 만듦
• 외부 함수를 이용할 수 있도록 해 줌
• 외부 함수도 object 파일에 있음
전처리기 컴파일러
Hello.c Hello.i
어셈블러 링커
Hello.s Hello.exeHello.o
소스 코드
(txt)
수정된
소스 코드
(txt)
어셈블리 코드
(txt)
재배치 기능한
object 프로그램
(binary)
실행 기능한
object 프로그램
(binary)
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
• 실행 가능 목적 파일 완성!
• 완성된 PE헤더를 가진다.
• (코드는 저 밑에 있음)
프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다
• 컴파일 시스템
• 위에서 살펴본 전처리기-컴파일러-어셈블러-링커
• 앞으로 컴파일러에서 뽑아내는 어셈블리 코드, 어셈블러에서 만들어 내는 기계어 코드, 링커로
라이브러리를 링킹하는 것 등을 알아볼 것임
• 알아보는 목적
• 프로그램 성능 최적화를 위해
• 링크 에러를 이해하기 위해
• 하이레벨 언어와 로우레벨 언어의 상관관계를 이해하기 위해
컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다
◦ 고급 언어로 짜인 프로그램이 기계가 알아들을 수 있는 형태로 변하는 과정
◦ 3장, 7장에서 다룰 것임 (3장은 리버싱 PPT에서 대부분 다룸)
◦ 고급 언어가 어떤 어셈블리어로 컴파일 되는가
◦ 어셈블리어 패턴
◦ 어떻게 다른 코드와 합쳐서 컴파일 할 수 있는가
◦ 어떻게 라이브러리를 이용할 수 있는가
◦ …
프로그램을 실행하면 무슨 일이 생길까?
• Hello world 프로그램이 실행되는 경로를 따라가보자
• 명령 프롬프트(쉘)에 프로그램 이름을 입력하여 실행함을 가정한다
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
프로그램을 실행하면 무슨 일이 생길까?
• 기본적인 하드웨어 구조
• 버스(Bus)
• 하드웨어들을 연결하는 전기적 배선군
• 컴포넌트들 간의 바이트 정보들을 전송
• 일반적으로 워드(word)라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계
• 어셈블리어, windows의 WORD가 아님에 주의
• 요즘 컴퓨터는 4바이트(32비트) 또는 8바이트(64비트)
• 입출력 장치
• 각 입출력 장치는 입출력 버스와 컨트롤러나 어댑터를 통해 연결됨
• 컨트롤러 : 디바이스 자체가 칩셋이거나 머더보드(메인보드)에 속함
• 어댑터 : 머더보드의 슬롯에 장착되는 카드
• 그림에서는 마우스, 키보드, 디스플레이, 디스크 드라이브가 속함
• 디스크엔 HelloWorld 프로그램의 기계어 코드가 저장되어 있다.
프로그램을 실행하면 무슨 일이 생길까?
• 기본적인 하드웨어 구조
• 메인 메모리
• 프로세서(CPU)가 프로그램을 실행하는 동안 데이터와 프로그램을 저장하는 임시 저장장치
• 물리적으로 메인 메모리는 DRAM칩들로 구성
• 논리적으로 메모리는 연속적인 바이트의 배열로, 각각 0부터 시작해서 고유의 주소(배열의
인덱스)를 가지고 있다.
• 프로세서(CPU)
• 메인 메모리에 저장된 인스트럭션(명령어)들을 해독(실행)하는 엔진
• PC(프로그램 카운터)가 가리키는 위치에 있는 인스트럭션을 실행
프로그램을 실행하면 무슨 일이 생길까?
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
1. 키보드에서 받은 입력 값을 레지스터에 옮긴다.
프로그램을 실행하면 무슨 일이 생길까?
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
2. 레지스터에서 값을 읽어 명령 프롬프트 프로그램의 메모리에 저장한다.
3. 엔터 키가 들어오면 입력이 끝났다는 것을 알게 되고, 명령 프롬프트는 입력 값을 판단하고 실행한다.
(이 부분의 하드웨어적 설명은 생략)
프로그램을 실행하면 무슨 일이 생길까?
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
4. 파일에 저장된 HelloWorld.exe의 코드와 데이터를 디스크에서 메인 메모리로 로딩 한다.
프로그램을 실행하면 무슨 일이 생길까?
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
5. “Hello world” 스트링을 메모리로부터 레지스터로 복사한다.
프로그램을 실행하면 무슨 일이 생길까?
명령 프롬프트 :
입력을 기다림
HelloWorld.exe
로딩
명령 프롬프트 :
프로그램 종료를
기다림
명령 프롬프트 :
입력을 기다림
명령 프롬프트 :
입력 값 판단
HelloWorld.exe
입력
HelloWorld.exe
실행 : 화면에
문자열 출력하기
HelloWorld.exe
종료
6. 레지스터에 저장된 스트링을 디스플레이 장치로 전송하여 화면에 글자들이 표시된다.
프로그램을 실행하면 무슨 일이 생길까?
◦ CPU에서 일어나는 일을 살펴봄
◦ 4장에서 다룸
◦ 어떻게 기계어를 읽고 해석하는가
◦ 기계어 명령을 어떤 과정을 거쳐 수행되는가
◦ CPU가 어떻게 일을 하나
◦ …
◦ 스터디에서는 다루지 않을 것
컴퓨터의 성능을 높이는 법 : 캐시
• 시스템이 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보낸다.
• 실제 작업을 느리게 하는 오버헤드가 된다
• 큰 용량 저장 장치 : 속도 느림, 가격 쌈
• 작은 용량 저장 장치 : 속도 빠름, 가격 비쌈
• 반도체 기술이 발달함에 따라 프로세서-메모리 간 격차가 지속적으로 증가
• 격차에 대응하기 위해 보다 작고 빠른 캐시 메모리를 만듦
• 프로세서가 곧 사용할 가능성이 높은 정보를 임시로 저장할 목적으로 사용
• 쉽게 말해 큰 용량 저장장치와 작은 용량 저장장치의 중간단계를 만들어 넣어 큰 용량 저장장치에 접근을 줄여준다.
컴퓨터의 성능을 높이는 법 : 캐시
• 램에 저장된 내용을 캐시에 넣어두고 빠르게 접근한다.
• 원하는 데이터가 캐시에 없다면 램에 접근하여 가져오고, 램에도 없다면 디스크에 접근하여 가져온다. (점점 시간이 많이 든다)
• Locality(지역성)으로 인해 시스템이 매우 크고 빠른 메모리 효과를 얻을 수 있다.
• 지역성 : 프로그램이 지엽적인 영역의 코드와 데이터를 엑세스하는 경향. 자주 쓰는 데이터만 쓰는 경향
Cache
Memory
저장장치들은 계층구조를 이룬다
• 컴퓨터 시스템의 저장장치들은 메모리 계층구조로 구성되어 있다.
• 밑으로 갈수록 더 느리고, 더 크고, 바이트당 가격이 싸다
• 메모리 계층 구조의 주요 아이디어
• 한 레벨의 저장장치가 다음 하위 레벨 저장장치의 캐시역할을 한다
• Ex) Level 1 캐시는 Level 2 캐시의 캐시역할, Level3 캐시는 RAM의 캐시역할
저장장치들은 계층구조를 이룬다
◦ 메모리에서 일어나는 일을 살펴봄
◦ 6장에서 다룸
◦ 메모리의 종류, 원리
◦ 캐시는 어떻게 구현되는가
◦ …
◦ 스터디에서는 다루지 않음
운영체제는 뭘 할까?
• 하드 디스크를 생각해보자.
• 하드 디스크에서 데이터를 가져오기 위해서는 암을 움직여 헤드(바늘)로 플래터(CD같은 것)에서의
적절한 위치를 가리키게 해야 한다.
• 플래터는 트랙과 섹터로 영역이 구분되어 있다. 적절한 트랙과 섹터를 바늘이 가리키면 자기장 극성
이 변하는 것을 체크하여 변화하면 1, 변화하지 않으면 0으로 인식한다.
• 읽은 정보를 CPU나 메인 메모리에 전달한다.
운영체제는 뭘 할까?
• 프로그램은 하드웨어를 이용하여 동작한다.
• CPU, 메인 메모리, 하드 디스크 등은 복잡한 기술을 이용하여 만들어졌다.
• 응용 프로그래머는 하드웨어를 이용하기 위해 “램의 몇 번 셀에 전압을 걸어라, 하드 디스크 암을 움직여서
몇 번 트랙을 찾고 몇 바이트 가져와라.”와 같은 코드를 짜지 않는다.
• 단순히 변수를 선언하고, 대입 연산을 하고, 라이브러리 함수를 호출한다.
• 이렇게 응용 프로그래머는 하드웨어를 사용함에도 그 구체적인 작동은 신경 쓰지 않아도 된다.
• OS가 처리해주기 때문이다.
• 운영체제
• 하드웨어와 응용 소프트웨어(Application) 사이에 위치한 소프트웨어
• 하드웨어 제어와 같은 복잡한 일들을 처리하는 서비스를 제공한다
• 응용 프로그램은 단순히 이미 만들어져 있는 함수를 호출하면 됨 (그 함수로 운영체제에게 처리를 요청하면 됨)
• 실제 하드웨어가 어떻게 작동하는지 신경 쓰지 않아도 됨
• 응용 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야 한다
• 사용자가 하드웨어에 대한 지식 없이도 컴퓨터를 이용할 수 있게 해 준다.
• 예) 실제로 데이터가 어떻게 저장되는지에 대한 지식 없이 ‘파일‘이라는 추상적 개념을 이용하여 데이터를 관리한다.
• 운영체제의 주 목적
• 응용 프로그램들이 하드웨어를 잘못 사용하는 것을 막는다
• 응용 프로그램들이 간단하고 일관성 있는 함수 호출만으로 복잡하고 매우 다른 하드웨어 장치들을 조작할 수 있도록 한다
운영체제는 뭘 할까?
software
hardware
User 모드
Kernel 모드
• 운영체제가 제공하는 서비스
• 추상화
• 추상화란?
• 컴퓨터에서 추상화란, 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
• 복잡하고 구체적인 일들을 추상화해서 쉽게 쓸 수 있게 해준다.
• 함수나 클래스도 추상화의 일종이다.
• 운영체제가 제공하는 추상화
• 복잡한 하드웨어의 모습을 숨기고 프로그램(과 프로그래머)이 일하기 쉬운 멋지고 일관성 있는 추상적 모습을 제공한다.
• 프로세스
• 가상 메모리
• 파일 시스템
• 추상화된 하드웨어를 이용하기 위한 서비스(함수 등)을 제공
• 하드웨어 자원 관리
• 여러 프로그램들이 자원을 받고 싶어 한다. 이들에게 정돈되고 잘 관리된 형태로 자원을 할당해 준다.
운영체제는 뭘 할까?
CPU Main Memory I/O devices
Virtual Memory
File
Processes
OS
Virtual Machine
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 - 프로세스
• 프로그래밍을 할 때, 분명 동시에 많은 프로그램들이 돌고 있지만 각자 자신이 사용하던 레지스터 값이나 변수 값이 다른 프로그램에 의해 변
할 거라는 가정을 하지 않았다.
• 레지스터는 CPU에 붙어있는 저장 장소이고, 그 수가 분명 제한되어 있다. 그런데 어떻게 동시에 많은 프로그램이 돌아갈 수 있을까?
• 메인 메모리는 분명 크기가 제한되어 있다. 그런데 어떻게 여러 프로그램들이 각자의 메모리를 침범하지 않을까?
• ->각각의 프로그램이 프로세스라는 형태로 관리되기 때문이다.
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 - 프로세스
• 프로세스 : 프로그램에서 실행중인 프로그램
• 프로그램이 이용하는 CPU와 메인 메모리, 입출력 장치를 전부 합쳐 ‘프로세스’라고 함
• 레지스터 값, 열려 있는 파일들의 목록, 기다리고 있는 알람, 관련된 프로세스의 목록, 프로그램이 실행할 때 필요한 모든 정보를 각 프로세스마다 가지고 있다.
• 마치 하나의 프로그램이 CPU, 메인 메모리, 입출력장치를 모두 독차지 하는 것처럼 보이게 해 줌
• 다른 프로그램이 뭘 하고 뭘 사용하는가에 상관없이 자신의 일을 진행할 수 있다.
• 동시에 여러 프로세스를 실행하는 방법
• 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다. 하지만 하나의 CPU만으로도 여러 프로그램을 실행할 수 있다..? 어떻게?
• 한동안 하나의 프로세스를 진행하다가 조금 뒤 다른 프로세스를 진행한다. 그 시간이 아주 짧아서 사람에게는 동시에 실행하는 것처럼 보일 뿐이다.
• 프로세스 전환 : Context switching이라는 방법을 이용
• A프로세스가 사용하고 있던 정보를(레지스터 값 등) 메모리에 백업해 두고 B프로세스로 전환한다. 이 때, B프로세스가 전환되기 전에 백업해 두었던 정보를 불러온다.
• A프로세스를 다시 실행할 때는 A프로세스가 백업한 정보를 복원하고 실행한다.
CPU Main Memory I/O devices
Virtual Memory
File
Processes
• 운영체제가 제공하는 추상화 – 프로세스
• 12장, 8장에서 자세히 다룸
• 여러 프로세스를 실행하여 동시에 일을 시키는 방법
• 프로세스를 관리하는 방법
• …
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 – 가상 메모리
• 32비트 컴퓨터를 기준으로, 각각의 프로그램이 사용할 수 있는 메모리의 최대 크기는 4GB이다. 프로그램 각각에게 4GB를
보장한다.
• 32비트 컴퓨터 : 주소가 32비트로 표현됨.
• 주소를 이용해서 접근할 수 있는 최대 크기 = 2^32
• 4GB = 2^2 * 2^30 (1GB = 2^30이다)
• 하지만 일반적으로 가정/사무용으로 쓰는 컴퓨터 램은 4GB, 8GB 이다.
• 그렇다면 프로그램 한 개, 두 개 정도밖에 못 써야 하는 거 아닐까? 어떻게 각각의 프로그램이 4GB까지 가질 수 있다는 거지?
• -> 가상 메모리라는 형태로 관리되기 때문이다.
운영체제는 뭘 할까?
• 다음을 가정해 보자.
• 나는 전공 과제를 해야 한다. 과제를 하기 위해 세 권의 책이 필요하다. 이 책은 컴퓨터 자료만 모아 놓은 3층 서랍에 각각 한 권 씩 들어있다.
• 나는 교양 과제를 해야 한다. 둘 다 기한이 얼마 남지 않았기 때문에 동시에 해 보려 한다. 교양 과제를 해결하기 위해서는 세 가지 문서가 필
요하다. 이 문서는 그 교양에 관련된 문서만 모아 놓은 3층 서랍에 각각 한 부 씩 들어있다.
• 내 책상에는 한 번에 세 권의 책만 놓을 수 있다. 나는 강박증이 있기 때문에 반드시 세 권만 놓아야 한다. 그리고 컴퓨터 자료와 교양 자료가
서랍 속에서 섞여서도 안 된다. 책이 들어있던 순서도 바뀌어서는 안 된다. 책상 위에서의 순서는 섞여도 괜찮다.
운영체제는 뭘 할까?
1층 : OS 책
<교양 자료 서랍><컴퓨터 자료 서랍>
2층 : 시스템 책
3층 : C 책
1층 : 교양 교재
2층 : 교양 강의록
3층 : 교양 과제 문서
1 : 비어 있음 2: 비어 있음 3 : 비어 있음
• 일단 책상의 1번 자리에 OS책을 꺼냈다. 2번 자리에는 교양 교재를 꺼냈다.
• 이 상태에서 교양 강의록을 꺼내고 싶다. -> 3번 자리에 놓는다.
운영체제는 뭘 할까?
1층 : OS 책
<교양 자료 서랍><컴퓨터 자료 서랍>
2층 : 시스템 책
3층 : C 책
1층 : 교양 교재
2층 : 교양 강의록
3층 : 교양 과제 문서
1 : OS 책 2: 교양 교재 3 : 비어 있음
• 책상이 가득 찼다.
• 그런데 시스템 책이 갑자기 필요해졌다.
• 무슨 책을 빼고 시스템 책을 가져올 지 결정해야 한다.
• 교양 교재를 읽어 보았는데 별 내용이 없는 것 같다.
• OS 책은 당장 필요하다.
• 교양 강의록은 교재보다 쓸 만하다.
• 교양 교재를 치우기로 결정했다.
운영체제는 뭘 할까?
1층 : OS 책
<교양 자료 서랍><컴퓨터 자료 서랍>
2층 : 시스템 책
3층 : C 책
1층 : 교양 교재
2층 : 교양 강의록
3층 : 교양 과제 문서
1 : OS 책 2: 시스템 책 3 : 교양 강의록
• 일단 한 고비 넘겼다. 여름방학에 알바를 해서 돈을 많이 벌었다. 100층 크기의 서랍을 샀다. 새 책상도 샀다. 책상에는 50권의 책을 놓을 수 있다.
• 컴퓨터 책은 60권 있다. 컴퓨터 책 서랍의 40개 공간은 비어 있다. 교양 책은 30권 있다. 교양 책 서랍의 70개 공간은 비어 있다.
• 빈 공간이 많기 때문에 책을 종류별로 분류했다. 컴퓨터 서랍의 위 쪽에는 OS와 시스템과 관련된 책을, 50번부터는 프로그래밍 언어와 관련된 책을 놓기로 했다.
• 책이 너무 많아서 관리하기 어렵다. 번호를 붙여서 관리하기로 했다. 책 번호는 서랍 번호와 같게 했다. (아무것도 할당되지 않은 책 번호가 있을 수도 있다)
• 책과 공간이 너무 많다. 체계적인 관리 시스템이 필요하다. 그래서 이런 표를 만들었다.
운영체제는 뭘 할까?
…
<컴퓨터 자료 서랍>
책 어디? 위치
1번 책 서랍 1번
2번 책 책상 5번
… … …
…비어 있음….. … …
50번 책 서랍 50번
51번 책 서랍 51번
52번 책 책상 10번
… … …
• 또 과제가 나왔다.
• 비슷한 일을 반복하지만 이번엔 책을 가져오거나 다시 넣을 때마다 관리 표를 업데이트 해 준다.
운영체제는 뭘 할까?
…
<컴퓨터 자료 서랍>
책 어디? 위치
1번 책 서랍 1번
2번 책 책상 5번
… … …
…비어 있음….. … …
50번 책 서랍 50번
51번 책 서랍 51번
52번 책 책상 10번
… … …
•책상에 있는 책 역시 관리하고 싶다.
• 어떤 게 중요한 책인지 전부 기억하기가 어렵다. 어떤 책을 합당한 이유로 넣는 방법은?
• 이전과 비슷하게 중요도에 따라 관리하는 테이블을 만들어보았다.
• 다른 새 책을 꺼내고 싶은데 책상에 자리가 없는 경우, 가장 적게 읽은 책을 집어넣으면 되겠다.
운영체제는 뭘 할까?
책 번호 원래 위치 책상에서의 위치 몇 번 읽었나?
1번 컴퓨터 5 10
2번 교양 2 7
1번 교양 10 5
3번 컴퓨터 7 1
... ... ... ...
• 운영체제가 제공하는 추상화 – 가상 메모리
• 가상 메모리는 위의 관리 표와 유사하다.
• 옛날 컴퓨터 : 물리메모리를 그대로 사용했다.
• 한 프로그램이 끝나야 메모리를 비우고 다른 프로그램을 실행할 수 있다.
• 한 번에 하나의 프로그램만 이용할 수 있었다.
운영체제는 뭘 할까?
<프로세스 주소공간>
높은 주소
낮은 주소
… …
<물리 메모리 주소공간>
…
• 운영체제가 제공하는 추상화 – 가상 메모리
• 한 번에 많은 프로그램을 사용하고 싶다.
• 프로세스가 필요로 하는 데이터 중에서 일부 당장 필요한 데이터만 램에 올려 두는 방식으로 램을 아낀다.
• 아껴진 공간에 다른 프로그램의 데이터를 올린다.
• 프로세스에서 사용하는 주소와 물리 메모리의 주소는 일치하지 않는다.
• 프로세스는 0부터 2^32까지의 가상의 메모리 주소를 이용하여 데이터의 논리적 위치를 정한다.
• 앞의 예에서는 서랍이라는 물리적 공간이 있었다. 서랍의 크기에 맞춰 크기 100의 표를 만들었다.
• 32비트 기준, 가상 메모리에서는 2^32크기의 가상의 공간을 가정하고 주소를 만든다. 가상의 서랍…
• 램에 올라오지 않은 데이터는 하드 디스크 등 저장장치에 저장된다.
• 가상 주소를 변환해주는 하드웨어와 OS를 이용하여 적절한 물리 메모리의 주소를 얻는다.
운영체제는 뭘 할까?
<프로세스 A의 주소공간>
… …
<물리 메모리 주소공간>
…
<프로세스 B의 주소공간>
운영체제는 뭘 할까?
<프로세스 A의 주소공간>
…
…
<물리 메모리 주소공간>
…
<프로세스 B의 주소공간>
가상 주소 램에 있음? 물리 주소 사용 함?
... … … ...
0x40000000 ㅇㅇ 0x23456000 ㅇㅇ
… … … ...
0x50000000
(비어 있음)
ㄴㄴ NULL ㄴㄴ
… … … ...
0x50001000 ㄴㄴ NULL
(하드에서 찾음)
ㅇㅇ
… … … ...
0x60000000 ㅇㅇ 0xABCD0000 ㅇㅇ
<프로세스 A의 관리 테이블>
* 이 예는 매우 약식이며 실제 방법과는 차이가 있음
실제로는 훨씬 구체적이다.
• 운영체제가 제공하는 추상화 – 가상 메모리
• 가상 메모리 : 각 프로그램에게 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식을 말한다.
• 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공해준다.
• 프로세스가 사용하는 주소는 가상메모리의 주소이다. 이 주소를 물리 메모리 주소로 번역하여 사용한다.
• 프로그램과 프로그래머는 0부터 2^32까지 연속적인 주소를 가진 공간을 독차지하고 쓴다고 생각할 수 있다.
• 실제 물리 메모리의 어디에 있는지는 상관할 필요가 없다.
• 추가적으로, 주소를 번역할 때 그 주소가 가진 권한을 체크하여 잘못된 접근으로부터 방어한다.
• 실제 물리 메모리에 프로세스가 사용하는 모든 데이터를 올려놓지는 않는다.
• 당장 필요한 데이터만 올려놓고, 당장 쓰지 않는 부분은 디스크에 저장해 둔다.
• 실제 메모리 크기보다 큰 공간이 있는 것처럼 사용할 수 있다.
• 프로세스의 사적 공간을 유지/보호하면서도 공유할 필요가 있는 데이터는 공유할 수 있다.
• 서로 다른 가상 주소를 쓰더라도 은 물리 주소로 번역해 주면 공유된다.
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 – 가상 메모리
• 9장에서 자세히 다룰 것임
• 가상 주소 -> 물리 주소 변환되는 과정
• 램에 올리지 않은 페이지를 가져오는 과정
• 램에 자리가 없을 때, 다른 페이지를 쫓아내고 자리를 만드는 과정
• 기타 메모리 관리, 보호 방법
• …
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 – 파일
• 파일
• 연속된 바이트들
• 일반 파일 뿐만 아니라 네트워크 등에 들어오는 보내는 정보들도 파일에서 읽고 쓰는 것이라 추상화 한다. (실제로 사용법도 비슷함)
• 키보드, 프린터, 하드디스크, 사운드 카드 등 모든 I/O device를 파일로 취급한다.
• 파일 I/O에 사용하는 함수(read/write)를 그대로 사용함
• 연속된 바이트들을 키보드에서 읽는다고(read) 생각.
• 연속된 바이트들을 프린터에 쓴다고(write) 생각.
• 연속된 바이트들을 네트워크에 쓰고 읽는다고 생각.
• 이렇게 다양한 입출력장치들의 통일된 뷰(view)를 제공
• 특정 I/O device의 기술에 대해 몰라도 쉽게 사용할 수 있다.
운영체제는 뭘 할까?
CPU Main Memory I/O devices
Virtual Memory
File
Processes
• 운영체제가 제공하는 추상화 – 파일
• 파일의 종류
• 일반 데이터 파일
• 디렉토리 파일
• 디바이스 파일(특수 파일)
• 물리적인 입출력장치들을 참조하는 파일
• 소켓
• 네트워크상의 다른 프로세스와 통신하기 위해 사용하는 파일
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 – 파일
• 파일 시스템 : 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제
• 파일에 읽고 쓰기 위해서는 파일을 찾아야 한다.
• 대부분 OS는 파일들을 그룹화하는 방법의 하나로 디렉터리(폴더)라는 개념을 지원한다.
• 옆의 그림에서 직사각형은 폴더, 원은 파일들
• 파일 시스템 종류에 따라 관리 방법이 다르다.
• FAT32, NTFS 등
• 파일 시스템마다 각자 장단점이 있음
• 어떤 파일 시스템을 택할지는 보통 사용자가 결정할 수 있음.
• 옆의 사진 – USB를 포맷하며 어떤 파일 시스템을 이용하는 USB로 초기화 할 것인지 선택한다.
• 포맷 : 원래는 저장장치에 자료를 저장할 수 있도록 형식(파일 시스템)을 잡아주는 것을 뜻한다.
• 새로 파일 시스템을 잡으면 내용물이 사라지므로 초기화와 같은 의미로 쓰이곤 함.
운영체제는 뭘 할까?
• 운영체제가 제공하는 추상화 – 파일
• 10장에서 자세히 다룰 것임
• 파일은 어떻게 저장되는가?
• 폴더는 어떻게 구현되어 있는가?
• 유명한 파일 시스템들
• …
운영체제는 뭘 할까?
운영체제는 뭘 할까?
• 하드웨어 자원 관리
• 3개의 프로그램이 프린터에 출력을 원한다고 가정하자.
• 관리가 안 된다면, A 프로그램이 몇 줄 출력하고, B 프로그램이 몇 줄 출력하고, C 프로그램이 몇 줄 출력해서 난리가 날 것이다.
• 이러한 상황이 생기지 않도록 운영체제에서 하드웨어 자원을 관리해 준다.
• A 프로그램이 프린터 출력을 요청하면 일을 실행해 준다. 이 때 B 프로그램과 C 프로그램이 프린터 출력을 요청하면 이들의 요청을 디스크
에 버퍼링해 둔다. A의 일이 끝나면 B의 요청을 프린터에게 보내고, B가 끝나면 C를 보낸다.
• 운영체제는 어떤 프로그램들이 어떤 자원을 사용하고 있는 지 확인하고, 자원에 대한 요청을 받아들이고, 자
원 사용에 대한 관리를 하고, 다른 프로그램과 사용자들로부터 오는 요청들의 충돌을 중재한다.
운영체제는 뭘 할까?
• 하드웨어 자원 관리
• 자원 분배
• 시간 멀티플렉싱
• 자원을 돌아가면서 사용한다.
• 예) CPU를 여러 프로세스가 돌아가며 사용한다.
• 공간 멀티플렉싱
• 자원의 일부를 사용한다.
• 예) 램의 일부를 사용한다.
• 누가 얼마나 할당되는가, 다음 차례는 누구 인가는 OS가 결정한다.
• 자원 보호
• 다른 프로그램이 사용하는 자원에 침범할 수 없도록 보호한다
운영체제는 뭘 할까?
• 하드웨어 자원 관리
• 프로그램이 키보드나 디스플레이, 디스크나 메인 메모리를 직접 접근하지 않는다.
• 운영체제가 제공하는 서비스를 이용하여 접근한다.
• Ex) 문자열 출력 시 printf 함수를 호출하여 출력한다. printf 함수 내부에는 운영체제가 제공하는 서비스를 이용하는 코드가 들어있다.
• 운영체제가 제공하는 서비스는 시스템 콜을 이용하여 요청할 수 있다.
• 하드웨어를 이용하는 라이브러리 함수는 시스템 콜을 하는 코드를 포함한다.
• Ex) printf(화면이나 파일로 출력), write(파일로 출력), read(파일로부터 입력)…
• 시스템 콜 (System call)
• OS의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
• 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
• 시스템 콜을 하면 사용자 모드에서 커널 모드로 바뀐다.
• 커널에서 시스템 콜 처리가 끝나면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.
운영체제는 뭘 할까?
• 시스템 콜 (System call)
• User 모드에서는 CPU가 제공하는 모든 명령어를 사용할 수는 없다. 몇 가지 사용할 수 없는 명령어가 있다.
• 즉, OS만이 사용할 수 있는 명령어가 있다.
• 되는 것, 안 되는 것은 해당 CPU 매뉴얼에 적혀 있음 (보통 하드웨어 접근에 관련된 것)
• User 모드에서는 할 수 없는 일을 처리하기 위해 OS에게 서비스를 요청하면(시스템 콜을 하면) Kernel 모드로 전환된다.
• Kernel이란?
• OS 코드와 데이터이며, 메모리에 상주한다.
• 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료구조의 집합
• 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 서비스를 제공한다
• Kernel 모드에서는 모든 하드웨어에 접근 가능, 모든 메모리 접근 가능, CPU에서 사용 가능한 모든 명령어 사용 가능하다.
운영체제는 뭘 할까?
software
hardware
User 모드
Kernel 모드
• 하드웨어 자원 관리
• 앞에서 나온 여러 기법들을 이용하여 관리한다. (가상 메모리 등)
• 추가적으로 스케줄링, 시스템 콜 등을 공부할 것
• 스케줄링 : 자원을 누구에게 줄지 결정하는 것 – 12장 할 때 같이 다루겠음
• 시스템 콜 : 운영체제에게 서비스를 요청하는 것 – 8장에서 다루겠음
• …
운영체제는 뭘 할까?
• 시스템의 관점에서 네트워크는 단지 또 다른 I/O device이다
• 읽어오는 데 시간이 아주 많이 걸리는 하드 디스크와 비슷하다
• OS가 제공하는 서비스를 이용하여 통신을 요청할 수 있다.
시스템은 네트워크를 사용하여 다른 시스템과 통신한다
• 네트워크 프로그래밍
• 11장에서 다룸
• 네트워크를 공부해야 이해하기 쉬움
• 스터디에서는 다루지 않음
시스템은 네트워크를 사용하여 다른 시스템과 통신한다
• 컴퓨터에서 어떻게 동시에 여러 일을 하는가
• 어떻게 시스템을 보다 빠르게(병렬적으로) 만드는가
• 여러가지 방법이 있다.
• 프로세스 이용
• 스레드(Thread) 이용
• 프로세스 내에서 실행되는 흐름의 단위
• 프로세스의 컨텍스트 내에서 돌아가는 논리 흐름
• 코드와 데이터를 공유하면서도 자신만의 지역변수 영역(스택)이 있음
• 잘 조작하면 스레드 고유 스택도 접근 가능
• 같은 가상메모리를 공유함
• …
동시성과 병렬성
• 동시성 프로그래밍
• 12장에서 다룰 것
• 동시에 일을 수행하게 하는 여러가지 방법
• 어떻게 프로세스/스레드를 관리하는가
• 동기화 하는 법
• Dead lock (교착상태)
• …
동시성과 병렬성
부록
• 참고 사이트
참고 사이트
• 전처리기, 컴파일러, 어셈블러, 링커를 따로 실행하고 싶을 시 쓰는 gcc 명령어
• http://air802.tistory.com/13

More Related Content

What's hot

UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
QooJuice
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)
QooJuice
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
MinGeun Park
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
ChangKyu Song
 

What's hot (20)

실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting게임서버 구축 방법비교 : GBaaS vs. Self-hosting
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
Ndc12 2
Ndc12 2Ndc12 2
Ndc12 2
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 

Similar to System+os study 1

운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
Junnie Jobs
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
mimul
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
YoungGun Na
 

Similar to System+os study 1 (20)

소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
33기 여채린 "리눅스에 대한 소개"
33기 여채린 "리눅스에 대한 소개"33기 여채린 "리눅스에 대한 소개"
33기 여채린 "리눅스에 대한 소개"
 
이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 

More from Jinkyoung Kim

More from Jinkyoung Kim (20)

Axelar 22.04 bughunting case study
Axelar 22.04 bughunting case studyAxelar 22.04 bughunting case study
Axelar 22.04 bughunting case study
 
Angle Protocol bughunting case study
Angle Protocol bughunting case studyAngle Protocol bughunting case study
Angle Protocol bughunting case study
 
Nouns DAO bughunting case study
Nouns DAO bughunting case studyNouns DAO bughunting case study
Nouns DAO bughunting case study
 
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
Linux reversing study_basic_4
Linux reversing study_basic_4Linux reversing study_basic_4
Linux reversing study_basic_4
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3
 
Linux reversing study_basic_2
Linux reversing study_basic_2Linux reversing study_basic_2
Linux reversing study_basic_2
 
Linux reversing study_basic_1
Linux reversing study_basic_1Linux reversing study_basic_1
Linux reversing study_basic_1
 
Pwnable study basic_3
Pwnable study basic_3Pwnable study basic_3
Pwnable study basic_3
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
Python
PythonPython
Python
 
System+os study 6
System+os study 6System+os study 6
System+os study 6
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4
 

Recently uploaded

Recently uploaded (8)

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

System+os study 1

  • 1. Computer System OS + SYSTEM PROGRAMMING #1 개론
  • 2. 진행 방향 • 시스템? • 컴퓨터에서 마이크로프로세서와 그와 관련된 집적 회로(IC) 칩과 회로, 입력 장치(키보드, 마우스, 디스크 구동 장치), 출력 장치(모니터, 디스크 구동 장 치), 그리고 주변 장치(인쇄기, 모뎀) 등으로 구성되는 하드웨어 세트 • 시스템 프로그램 • 시스템을 제어하는 프로그램, 컴퓨터 시스템을 동작시키는 프로그램 • OS에게 서비스를 요청하는 방식으로 하드웨어를 동작 시킨다. • 대부분의 응용 프로그램은 시스템 프로그램이지만, 여기서는 조금 더 하드웨어와 OS를 고려하는 프로그램을 시스템 프로그램이라 말하겠다. • 시스템 프로그래밍을 잘 하기 위해서는 기본적으로 OS를 알고 있어야 함 • OS • 하드웨어를 제어하고 컴퓨터 자원을 관리하며, 컴퓨터 사용을 편리하게 해 주고 응용 프로그램의 수행을 도와주며, 사용자와 하드웨어 사이의 매개체 역 할을 하는 프로그램 • 해킹공부에 필요한 시스템 배경지식에 대해 공부하는 것이 목적 • 학교 수업에서 다루는 부분을 생략할 수도 있음
  • 3. 진행 방향 • 큰 틀은 컴퓨터 시스템 책을 따라 감 • Computer Systems – A programmer’s Perspective (전공 교재) • OS와 겹치는 내용은 컴퓨터 시스템 책보다 깊이 들어 감 • OS 참고서적 • Modern Operating Systems -fourth edition (전공 교재) • 운영체제론(위 책의 번역본, 옛날판)
  • 4. 진행 방향 • OS • 종류는 크게 UNIX와 Windows가 있다. • 이 둘은 매우 다름 • 앞으로 배울 OS의 기본적인 일은 어떤 OS라도 처리해주지만, 각자 스타일이 다르다. • 즉, 구현 세부 사항은 매우 다르다. • OS에 대한 내용은 기본적으로 UNIX를 기준으로 할 것임 • 비슷한 개념이 Windows에도 적용이 됨
  • 5. 컴퓨터 시스템 책 내용 • 1장 : 개론 • 2장 : 컴퓨터에서의 산술연산 • 3장 : 고급언어 -> 어셈블리어 패턴 • 4장 : CPU의 구조 • 5장 : 최적화 • 6장 : 메모리의 구조 • 7장 : 링킹 과정 (다른 소스 파일과 합치기, 라이브러리 쓸 수 있게 하기) • 8장 : 예외 처리 • 9장 : 가상 메모리 • 10장 : 파일 I/O • 11장 : 네트워크 프로그래밍 (네트워크 공부 후 할 계획) • 12장 : 동시성 프로그래밍 ● : OS + ● : 안 다룸
  • 6. OS 다룰 내용 • 추상화 • 프로세스 • 어떻게 한 프로세스가 물리 메모리를 독점하는 것처럼 보이게 하는가 • 어떻게 동시에 많은 프로그램을 실행하게 하는가 • 가상 메모리 • 어떻게 메모리를 관리하는가 • 파일 시스템 • 파일이 어떻게 하드웨어에 저장되는가 • 폴더는 어떻게 저장되고 폴더 속에 어떻게 파일이 저장되는가 • 하드웨어 자원 관리 • 어떻게 하드웨어를 적절히 나눠 쓰게 하는가 • System call 등 OS가 제공하는 서비스
  • 7. 목차 • 컴퓨터 시스템 1장 : 개론 + OS 개론 //컴퓨터 시스템 • 정보는 비트와 컨텍스트로 이루어진다 //1.1장 • 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다 //1.2장 • 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다 //1.3장 • 프로그램을 실행하면 무슨 일이 생길까? //1.4장 • 컴퓨터의 성능을 높이는 법 : 캐시 //1.5장 • 저장장치들은 계층구조를 이룬다 //1.6장 • 운영체제는 뭘 할까? //1.7장 • 시스템은 네트워크를 사용하여 다른 시스템과 통신한다 //1.8장 • 동시성과 병렬성 //1.9장 • 부록 • 참고 사이트
  • 8. 정보는 비트와 컨텍스트로 이루어진다 헥사 에디터로 hello0라 쓰고 확장자를 mp3로 저장했다. 어떤 일이 일어날까?
  • 9. 정보는 비트와 컨텍스트로 이루어진다 더블 클릭하니 자동으로 음악 재생기가 실행된다. 해당 확장자에 default로 사용할 프로그램이 정해져 있기 때문이다. (설정에서 변경 가능) 하지만 정상 실행되지 않는다.
  • 10. 정보는 비트와 컨텍스트로 이루어진다 연결 프로그램을 임의로 변경하여 메모장으로 열어보았다. Txt확장자가 아님에도 글자가 보인다.
  • 11. 정보는 비트와 컨텍스트로 이루어진다 이번엔 어떤 mp3파일의 확장자를 txt로 바꾸어 보았다. 더블 클릭하면 메모장에서 열리지만 유의미한 문자로는 보이지 않는다.
  • 12. 정보는 비트와 컨텍스트로 이루어진다 이 txt파일의 연결 프로그램을 임의로 변경하여 음악 플레이어로 실행해 보았다. 확장자가 이상하다는 경고창이 뜨긴 하지만 음악은 잘 실행된다.
  • 13. 확장자가 mp3이지만 텍스트 파일임을 가정하고 숫자들을 해석하는 경우 숫자들을 아스키 혹은 유니코드로 해석한다. 아스키 코드에 대응하는 알파벳을 써 보면 의미 있는 텍스트가 나온다. 확장자가 mp3이지만 mp3파일을 위한 형식에 맞지 않아 파일을 재생할 수 없다. 정보는 비트와 컨텍스트로 이루어진다
  • 14. 정보는 비트와 컨텍스트로 이루어진다 텍스트 파일이라 생각하고 숫자들을 해석하는 경우 숫자들을 아스키 혹은 유니코드로 생각하고 해석한다. Mp3파일은 글씨를 나타내기 위한 정보가 아니므로 아스키 혹은 유니코드로 해석하면 의미 없는 정보가 된다. 확장자가 txt이지만 기존 비트들은 변하지 않았으므로 MP3파일을 해석하는 방식으로 비트를 해석하여 재생할 수 있다.
  • 15. 파일 자체는 똑같이 숫자들의 나열이지만 각자의 목적에 따라 요구하는 해석 방법이 달라진다. 컴퓨터가 보기엔 똑같은 무작위의 숫자 배열이지만 해석에 따라 의미가 생긴다. 정보는 비트와 컨텍스트로 이루어진다
  • 16. 정보는 비트와 컨텍스트로 이루어진다 • 컴퓨터 내의 정보 • 상황에 따라 다르게 해석되는 비트들의 그룹 • 저장 되어있는 비트들은 그저 숫자 덩어리일 뿐이다. • 숫자를 해석하는 컨텍스트에 의해 그 숫자가 무엇을 의미하는지 결정된다. • 예) • 같은 내용의 파일이지만 메모장으로 여는가 음악 플레이어로 여는가에 따라 다르게 해석된다.
  • 17. 정보는 비트와 컨텍스트로 이루어진다 • 파일의 종류는 크게 두 가지 • 텍스트 파일 • 바이너리 파일의 특수한 경우 • 아스키 코드, 유니코드 등에 해당되는 숫자로만 이루어진 파일 • C언어 코드도 텍스트 파일의 일종 • 바이너리 파일 • 텍스트 파일 이외의 파일 • 시스템 입장에서는 텍스트 파일이나 바이너리 파일이나 똑같은 숫자 배열일 뿐임 바이너리 파일 텍스트 파일
  • 18. 정보는 비트와 컨텍스트로 이루어진다 ◦ 정보를 표현하고 처리하는 방법 ◦ 2장에서 다룰 것 ◦ 컴퓨터에서 숫자를 표현하는 방법 ◦ 음수, 양수를 비트로 표현하고 계산하는 방법 ◦ 소수를 표현하는 방법 ◦ …
  • 19. 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다 • 고급 언어로 프로그래밍한 코드가 실행 가능 파일이 되는 과정을 알아보자 • 사람이 알아들을 수 있는 고급 언어(예 : C언어)는 네 단계에 걸쳐 실행 가능 프로그램이 된다 • 전처리, 컴파일, 어셈블, 링크 • 각각 전처리기, 컴파일러, 어셈블러, 링커에 의해 실행 • 이 네 프로그램을 합쳐서 컴파일 시스템이라고 부름 • Text파일인 고급 언어 소스 코드에서 실행 가능한 프로그램인 binary 파일(text보다 광범위한)이 된다. 전처리기 컴파일러 Hello.c Hello.i 어셈블러 링커 Hello.s Hello.exeHello.o 소스 코드 (txt) 수정된 소스 코드 (txt) 어셈블리 코드 (txt) 재배치 기능한 object 프로그램 (binary) 실행 기능한 object 프로그램 (binary)
  • 20. 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다 • 전처리기 • C언어에서 #문자로 시작하는 디렉티브를 처리해 줌 • 주석 제거 전처리기 컴파일러 Hello.c Hello.i 어셈블러 링커 Hello.s Hello.exeHello.o 소스 코드 (txt) 수정된 소스 코드 (txt) 어셈블리 코드 (txt) 재배치 기능한 object 프로그램 (binary) 실행 기능한 object 프로그램 (binary)
  • 21. • 전처리기만 실행하여 hello.i 파일을 얻었다. • Include한 헤더파일에 써 있는 내용을 붙였다. • Define한 NUM을 상수로 대체했다. 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 22. • 헤더에는 함수의 원형만 써 있다. • 실제로 함수 코드를 사용할 수 있도록 하는 일은 Link 과정에서 이루어진다. 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 23. • 컴파일러 • 수정된 C언어를 어셈블리어로 번역함 전처리기 컴파일러 Hello.c Hello.i 어셈블러 링커 Hello.s Hello.exeHello.o 소스 코드 (txt) 수정된 소스 코드 (txt) 어셈블리 코드 (txt) 재배치 기능한 object 프로그램 (binary) 실행 기능한 object 프로그램 (binary) 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 24. • hello.i 파일을 컴파일하여 hello.s 파일을 얻었다. • 붙여진 헤더파일 내용에서 printf 함수의 형태를 얻는다. 그것을 보고 함수에 인자를 넣는 코드를 만들 수 있다. • 실제 함수 코드가 없기 때문에(라이브러리에 있기 때문에) 함수가 어떤 인자를 요구하는 지 알 수 없다. • 그것을 알려주기 위해서 함수의 형태(원형)에 대한 정보가 들어있는 헤더를 포함한다. • 적절한 어셈블리 코드를 만들기 위해 함수 원형에 대한 정보가 필요했다. 어셈블리 코드를 만들었으므로 삭제된다. 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 25. • 어셈블러 • 어셈블리어 코드를 기계어로 번역 • 실행 파일의 뼈대를 만듦 • 결과물은 더 이상 text 파일이 아님 (=사람이 읽기 위한 파일이 아님) • 기계가 읽기 위한 파일 전처리기 컴파일러 Hello.c Hello.i 어셈블러 링커 Hello.s Hello.exeHello.o 소스 코드 (txt) 수정된 소스 코드 (txt) 어셈블리 코드 (txt) 재배치 기능한 object 프로그램 (binary) 실행 기능한 object 프로그램 (binary) 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 26. • 빨간 테두리 속에 있는 것이 기계어 코드 영역 • 그 외 부분에는 PE 헤더, data영역 등 실행에 필요한 정보가 있다 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 27. • 링커 • 다른 재배치 가능한 object 프로그램과 합침 • 여러 C 파일로 나누어 코딩한 경우 • 다른 C 파일들로 생성한 재배치 가능 object 프로그램과 연결하여 하나의 실행 가능 object 프로그램을 만듦 • 외부 함수를 이용할 수 있도록 해 줌 • 외부 함수도 object 파일에 있음 전처리기 컴파일러 Hello.c Hello.i 어셈블러 링커 Hello.s Hello.exeHello.o 소스 코드 (txt) 수정된 소스 코드 (txt) 어셈블리 코드 (txt) 재배치 기능한 object 프로그램 (binary) 실행 기능한 object 프로그램 (binary) 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 28. • 실행 가능 목적 파일 완성! • 완성된 PE헤더를 가진다. • (코드는 저 밑에 있음) 프로그램은(코드는) 다른 프로그램에 의해 다른 형태로 번역된다
  • 29. 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다 • 컴파일 시스템 • 위에서 살펴본 전처리기-컴파일러-어셈블러-링커 • 앞으로 컴파일러에서 뽑아내는 어셈블리 코드, 어셈블러에서 만들어 내는 기계어 코드, 링커로 라이브러리를 링킹하는 것 등을 알아볼 것임 • 알아보는 목적 • 프로그램 성능 최적화를 위해 • 링크 에러를 이해하기 위해 • 하이레벨 언어와 로우레벨 언어의 상관관계를 이해하기 위해
  • 30. 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다 ◦ 고급 언어로 짜인 프로그램이 기계가 알아들을 수 있는 형태로 변하는 과정 ◦ 3장, 7장에서 다룰 것임 (3장은 리버싱 PPT에서 대부분 다룸) ◦ 고급 언어가 어떤 어셈블리어로 컴파일 되는가 ◦ 어셈블리어 패턴 ◦ 어떻게 다른 코드와 합쳐서 컴파일 할 수 있는가 ◦ 어떻게 라이브러리를 이용할 수 있는가 ◦ …
  • 31. 프로그램을 실행하면 무슨 일이 생길까? • Hello world 프로그램이 실행되는 경로를 따라가보자 • 명령 프롬프트(쉘)에 프로그램 이름을 입력하여 실행함을 가정한다 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료
  • 32. 프로그램을 실행하면 무슨 일이 생길까? • 기본적인 하드웨어 구조 • 버스(Bus) • 하드웨어들을 연결하는 전기적 배선군 • 컴포넌트들 간의 바이트 정보들을 전송 • 일반적으로 워드(word)라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계 • 어셈블리어, windows의 WORD가 아님에 주의 • 요즘 컴퓨터는 4바이트(32비트) 또는 8바이트(64비트) • 입출력 장치 • 각 입출력 장치는 입출력 버스와 컨트롤러나 어댑터를 통해 연결됨 • 컨트롤러 : 디바이스 자체가 칩셋이거나 머더보드(메인보드)에 속함 • 어댑터 : 머더보드의 슬롯에 장착되는 카드 • 그림에서는 마우스, 키보드, 디스플레이, 디스크 드라이브가 속함 • 디스크엔 HelloWorld 프로그램의 기계어 코드가 저장되어 있다.
  • 33. 프로그램을 실행하면 무슨 일이 생길까? • 기본적인 하드웨어 구조 • 메인 메모리 • 프로세서(CPU)가 프로그램을 실행하는 동안 데이터와 프로그램을 저장하는 임시 저장장치 • 물리적으로 메인 메모리는 DRAM칩들로 구성 • 논리적으로 메모리는 연속적인 바이트의 배열로, 각각 0부터 시작해서 고유의 주소(배열의 인덱스)를 가지고 있다. • 프로세서(CPU) • 메인 메모리에 저장된 인스트럭션(명령어)들을 해독(실행)하는 엔진 • PC(프로그램 카운터)가 가리키는 위치에 있는 인스트럭션을 실행
  • 34. 프로그램을 실행하면 무슨 일이 생길까? 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료 1. 키보드에서 받은 입력 값을 레지스터에 옮긴다.
  • 35. 프로그램을 실행하면 무슨 일이 생길까? 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료 2. 레지스터에서 값을 읽어 명령 프롬프트 프로그램의 메모리에 저장한다. 3. 엔터 키가 들어오면 입력이 끝났다는 것을 알게 되고, 명령 프롬프트는 입력 값을 판단하고 실행한다. (이 부분의 하드웨어적 설명은 생략)
  • 36. 프로그램을 실행하면 무슨 일이 생길까? 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료 4. 파일에 저장된 HelloWorld.exe의 코드와 데이터를 디스크에서 메인 메모리로 로딩 한다.
  • 37. 프로그램을 실행하면 무슨 일이 생길까? 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료 5. “Hello world” 스트링을 메모리로부터 레지스터로 복사한다.
  • 38. 프로그램을 실행하면 무슨 일이 생길까? 명령 프롬프트 : 입력을 기다림 HelloWorld.exe 로딩 명령 프롬프트 : 프로그램 종료를 기다림 명령 프롬프트 : 입력을 기다림 명령 프롬프트 : 입력 값 판단 HelloWorld.exe 입력 HelloWorld.exe 실행 : 화면에 문자열 출력하기 HelloWorld.exe 종료 6. 레지스터에 저장된 스트링을 디스플레이 장치로 전송하여 화면에 글자들이 표시된다.
  • 39. 프로그램을 실행하면 무슨 일이 생길까? ◦ CPU에서 일어나는 일을 살펴봄 ◦ 4장에서 다룸 ◦ 어떻게 기계어를 읽고 해석하는가 ◦ 기계어 명령을 어떤 과정을 거쳐 수행되는가 ◦ CPU가 어떻게 일을 하나 ◦ … ◦ 스터디에서는 다루지 않을 것
  • 40. 컴퓨터의 성능을 높이는 법 : 캐시 • 시스템이 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보낸다. • 실제 작업을 느리게 하는 오버헤드가 된다 • 큰 용량 저장 장치 : 속도 느림, 가격 쌈 • 작은 용량 저장 장치 : 속도 빠름, 가격 비쌈 • 반도체 기술이 발달함에 따라 프로세서-메모리 간 격차가 지속적으로 증가 • 격차에 대응하기 위해 보다 작고 빠른 캐시 메모리를 만듦 • 프로세서가 곧 사용할 가능성이 높은 정보를 임시로 저장할 목적으로 사용 • 쉽게 말해 큰 용량 저장장치와 작은 용량 저장장치의 중간단계를 만들어 넣어 큰 용량 저장장치에 접근을 줄여준다.
  • 41. 컴퓨터의 성능을 높이는 법 : 캐시 • 램에 저장된 내용을 캐시에 넣어두고 빠르게 접근한다. • 원하는 데이터가 캐시에 없다면 램에 접근하여 가져오고, 램에도 없다면 디스크에 접근하여 가져온다. (점점 시간이 많이 든다) • Locality(지역성)으로 인해 시스템이 매우 크고 빠른 메모리 효과를 얻을 수 있다. • 지역성 : 프로그램이 지엽적인 영역의 코드와 데이터를 엑세스하는 경향. 자주 쓰는 데이터만 쓰는 경향 Cache Memory
  • 42. 저장장치들은 계층구조를 이룬다 • 컴퓨터 시스템의 저장장치들은 메모리 계층구조로 구성되어 있다. • 밑으로 갈수록 더 느리고, 더 크고, 바이트당 가격이 싸다 • 메모리 계층 구조의 주요 아이디어 • 한 레벨의 저장장치가 다음 하위 레벨 저장장치의 캐시역할을 한다 • Ex) Level 1 캐시는 Level 2 캐시의 캐시역할, Level3 캐시는 RAM의 캐시역할
  • 43. 저장장치들은 계층구조를 이룬다 ◦ 메모리에서 일어나는 일을 살펴봄 ◦ 6장에서 다룸 ◦ 메모리의 종류, 원리 ◦ 캐시는 어떻게 구현되는가 ◦ … ◦ 스터디에서는 다루지 않음
  • 44. 운영체제는 뭘 할까? • 하드 디스크를 생각해보자. • 하드 디스크에서 데이터를 가져오기 위해서는 암을 움직여 헤드(바늘)로 플래터(CD같은 것)에서의 적절한 위치를 가리키게 해야 한다. • 플래터는 트랙과 섹터로 영역이 구분되어 있다. 적절한 트랙과 섹터를 바늘이 가리키면 자기장 극성 이 변하는 것을 체크하여 변화하면 1, 변화하지 않으면 0으로 인식한다. • 읽은 정보를 CPU나 메인 메모리에 전달한다.
  • 45. 운영체제는 뭘 할까? • 프로그램은 하드웨어를 이용하여 동작한다. • CPU, 메인 메모리, 하드 디스크 등은 복잡한 기술을 이용하여 만들어졌다. • 응용 프로그래머는 하드웨어를 이용하기 위해 “램의 몇 번 셀에 전압을 걸어라, 하드 디스크 암을 움직여서 몇 번 트랙을 찾고 몇 바이트 가져와라.”와 같은 코드를 짜지 않는다. • 단순히 변수를 선언하고, 대입 연산을 하고, 라이브러리 함수를 호출한다. • 이렇게 응용 프로그래머는 하드웨어를 사용함에도 그 구체적인 작동은 신경 쓰지 않아도 된다. • OS가 처리해주기 때문이다.
  • 46. • 운영체제 • 하드웨어와 응용 소프트웨어(Application) 사이에 위치한 소프트웨어 • 하드웨어 제어와 같은 복잡한 일들을 처리하는 서비스를 제공한다 • 응용 프로그램은 단순히 이미 만들어져 있는 함수를 호출하면 됨 (그 함수로 운영체제에게 처리를 요청하면 됨) • 실제 하드웨어가 어떻게 작동하는지 신경 쓰지 않아도 됨 • 응용 프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야 한다 • 사용자가 하드웨어에 대한 지식 없이도 컴퓨터를 이용할 수 있게 해 준다. • 예) 실제로 데이터가 어떻게 저장되는지에 대한 지식 없이 ‘파일‘이라는 추상적 개념을 이용하여 데이터를 관리한다. • 운영체제의 주 목적 • 응용 프로그램들이 하드웨어를 잘못 사용하는 것을 막는다 • 응용 프로그램들이 간단하고 일관성 있는 함수 호출만으로 복잡하고 매우 다른 하드웨어 장치들을 조작할 수 있도록 한다 운영체제는 뭘 할까? software hardware User 모드 Kernel 모드
  • 47. • 운영체제가 제공하는 서비스 • 추상화 • 추상화란? • 컴퓨터에서 추상화란, 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. • 복잡하고 구체적인 일들을 추상화해서 쉽게 쓸 수 있게 해준다. • 함수나 클래스도 추상화의 일종이다. • 운영체제가 제공하는 추상화 • 복잡한 하드웨어의 모습을 숨기고 프로그램(과 프로그래머)이 일하기 쉬운 멋지고 일관성 있는 추상적 모습을 제공한다. • 프로세스 • 가상 메모리 • 파일 시스템 • 추상화된 하드웨어를 이용하기 위한 서비스(함수 등)을 제공 • 하드웨어 자원 관리 • 여러 프로그램들이 자원을 받고 싶어 한다. 이들에게 정돈되고 잘 관리된 형태로 자원을 할당해 준다. 운영체제는 뭘 할까? CPU Main Memory I/O devices Virtual Memory File Processes OS Virtual Machine
  • 48. 운영체제는 뭘 할까? • 운영체제가 제공하는 추상화 - 프로세스 • 프로그래밍을 할 때, 분명 동시에 많은 프로그램들이 돌고 있지만 각자 자신이 사용하던 레지스터 값이나 변수 값이 다른 프로그램에 의해 변 할 거라는 가정을 하지 않았다. • 레지스터는 CPU에 붙어있는 저장 장소이고, 그 수가 분명 제한되어 있다. 그런데 어떻게 동시에 많은 프로그램이 돌아갈 수 있을까? • 메인 메모리는 분명 크기가 제한되어 있다. 그런데 어떻게 여러 프로그램들이 각자의 메모리를 침범하지 않을까? • ->각각의 프로그램이 프로세스라는 형태로 관리되기 때문이다.
  • 49. 운영체제는 뭘 할까? • 운영체제가 제공하는 추상화 - 프로세스 • 프로세스 : 프로그램에서 실행중인 프로그램 • 프로그램이 이용하는 CPU와 메인 메모리, 입출력 장치를 전부 합쳐 ‘프로세스’라고 함 • 레지스터 값, 열려 있는 파일들의 목록, 기다리고 있는 알람, 관련된 프로세스의 목록, 프로그램이 실행할 때 필요한 모든 정보를 각 프로세스마다 가지고 있다. • 마치 하나의 프로그램이 CPU, 메인 메모리, 입출력장치를 모두 독차지 하는 것처럼 보이게 해 줌 • 다른 프로그램이 뭘 하고 뭘 사용하는가에 상관없이 자신의 일을 진행할 수 있다. • 동시에 여러 프로세스를 실행하는 방법 • 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다. 하지만 하나의 CPU만으로도 여러 프로그램을 실행할 수 있다..? 어떻게? • 한동안 하나의 프로세스를 진행하다가 조금 뒤 다른 프로세스를 진행한다. 그 시간이 아주 짧아서 사람에게는 동시에 실행하는 것처럼 보일 뿐이다. • 프로세스 전환 : Context switching이라는 방법을 이용 • A프로세스가 사용하고 있던 정보를(레지스터 값 등) 메모리에 백업해 두고 B프로세스로 전환한다. 이 때, B프로세스가 전환되기 전에 백업해 두었던 정보를 불러온다. • A프로세스를 다시 실행할 때는 A프로세스가 백업한 정보를 복원하고 실행한다. CPU Main Memory I/O devices Virtual Memory File Processes
  • 50. • 운영체제가 제공하는 추상화 – 프로세스 • 12장, 8장에서 자세히 다룸 • 여러 프로세스를 실행하여 동시에 일을 시키는 방법 • 프로세스를 관리하는 방법 • … 운영체제는 뭘 할까?
  • 51. • 운영체제가 제공하는 추상화 – 가상 메모리 • 32비트 컴퓨터를 기준으로, 각각의 프로그램이 사용할 수 있는 메모리의 최대 크기는 4GB이다. 프로그램 각각에게 4GB를 보장한다. • 32비트 컴퓨터 : 주소가 32비트로 표현됨. • 주소를 이용해서 접근할 수 있는 최대 크기 = 2^32 • 4GB = 2^2 * 2^30 (1GB = 2^30이다) • 하지만 일반적으로 가정/사무용으로 쓰는 컴퓨터 램은 4GB, 8GB 이다. • 그렇다면 프로그램 한 개, 두 개 정도밖에 못 써야 하는 거 아닐까? 어떻게 각각의 프로그램이 4GB까지 가질 수 있다는 거지? • -> 가상 메모리라는 형태로 관리되기 때문이다. 운영체제는 뭘 할까?
  • 52. • 다음을 가정해 보자. • 나는 전공 과제를 해야 한다. 과제를 하기 위해 세 권의 책이 필요하다. 이 책은 컴퓨터 자료만 모아 놓은 3층 서랍에 각각 한 권 씩 들어있다. • 나는 교양 과제를 해야 한다. 둘 다 기한이 얼마 남지 않았기 때문에 동시에 해 보려 한다. 교양 과제를 해결하기 위해서는 세 가지 문서가 필 요하다. 이 문서는 그 교양에 관련된 문서만 모아 놓은 3층 서랍에 각각 한 부 씩 들어있다. • 내 책상에는 한 번에 세 권의 책만 놓을 수 있다. 나는 강박증이 있기 때문에 반드시 세 권만 놓아야 한다. 그리고 컴퓨터 자료와 교양 자료가 서랍 속에서 섞여서도 안 된다. 책이 들어있던 순서도 바뀌어서는 안 된다. 책상 위에서의 순서는 섞여도 괜찮다. 운영체제는 뭘 할까? 1층 : OS 책 <교양 자료 서랍><컴퓨터 자료 서랍> 2층 : 시스템 책 3층 : C 책 1층 : 교양 교재 2층 : 교양 강의록 3층 : 교양 과제 문서 1 : 비어 있음 2: 비어 있음 3 : 비어 있음
  • 53. • 일단 책상의 1번 자리에 OS책을 꺼냈다. 2번 자리에는 교양 교재를 꺼냈다. • 이 상태에서 교양 강의록을 꺼내고 싶다. -> 3번 자리에 놓는다. 운영체제는 뭘 할까? 1층 : OS 책 <교양 자료 서랍><컴퓨터 자료 서랍> 2층 : 시스템 책 3층 : C 책 1층 : 교양 교재 2층 : 교양 강의록 3층 : 교양 과제 문서 1 : OS 책 2: 교양 교재 3 : 비어 있음
  • 54. • 책상이 가득 찼다. • 그런데 시스템 책이 갑자기 필요해졌다. • 무슨 책을 빼고 시스템 책을 가져올 지 결정해야 한다. • 교양 교재를 읽어 보았는데 별 내용이 없는 것 같다. • OS 책은 당장 필요하다. • 교양 강의록은 교재보다 쓸 만하다. • 교양 교재를 치우기로 결정했다. 운영체제는 뭘 할까? 1층 : OS 책 <교양 자료 서랍><컴퓨터 자료 서랍> 2층 : 시스템 책 3층 : C 책 1층 : 교양 교재 2층 : 교양 강의록 3층 : 교양 과제 문서 1 : OS 책 2: 시스템 책 3 : 교양 강의록
  • 55. • 일단 한 고비 넘겼다. 여름방학에 알바를 해서 돈을 많이 벌었다. 100층 크기의 서랍을 샀다. 새 책상도 샀다. 책상에는 50권의 책을 놓을 수 있다. • 컴퓨터 책은 60권 있다. 컴퓨터 책 서랍의 40개 공간은 비어 있다. 교양 책은 30권 있다. 교양 책 서랍의 70개 공간은 비어 있다. • 빈 공간이 많기 때문에 책을 종류별로 분류했다. 컴퓨터 서랍의 위 쪽에는 OS와 시스템과 관련된 책을, 50번부터는 프로그래밍 언어와 관련된 책을 놓기로 했다. • 책이 너무 많아서 관리하기 어렵다. 번호를 붙여서 관리하기로 했다. 책 번호는 서랍 번호와 같게 했다. (아무것도 할당되지 않은 책 번호가 있을 수도 있다) • 책과 공간이 너무 많다. 체계적인 관리 시스템이 필요하다. 그래서 이런 표를 만들었다. 운영체제는 뭘 할까? … <컴퓨터 자료 서랍> 책 어디? 위치 1번 책 서랍 1번 2번 책 책상 5번 … … … …비어 있음….. … … 50번 책 서랍 50번 51번 책 서랍 51번 52번 책 책상 10번 … … …
  • 56. • 또 과제가 나왔다. • 비슷한 일을 반복하지만 이번엔 책을 가져오거나 다시 넣을 때마다 관리 표를 업데이트 해 준다. 운영체제는 뭘 할까? … <컴퓨터 자료 서랍> 책 어디? 위치 1번 책 서랍 1번 2번 책 책상 5번 … … … …비어 있음….. … … 50번 책 서랍 50번 51번 책 서랍 51번 52번 책 책상 10번 … … …
  • 57. •책상에 있는 책 역시 관리하고 싶다. • 어떤 게 중요한 책인지 전부 기억하기가 어렵다. 어떤 책을 합당한 이유로 넣는 방법은? • 이전과 비슷하게 중요도에 따라 관리하는 테이블을 만들어보았다. • 다른 새 책을 꺼내고 싶은데 책상에 자리가 없는 경우, 가장 적게 읽은 책을 집어넣으면 되겠다. 운영체제는 뭘 할까? 책 번호 원래 위치 책상에서의 위치 몇 번 읽었나? 1번 컴퓨터 5 10 2번 교양 2 7 1번 교양 10 5 3번 컴퓨터 7 1 ... ... ... ...
  • 58. • 운영체제가 제공하는 추상화 – 가상 메모리 • 가상 메모리는 위의 관리 표와 유사하다. • 옛날 컴퓨터 : 물리메모리를 그대로 사용했다. • 한 프로그램이 끝나야 메모리를 비우고 다른 프로그램을 실행할 수 있다. • 한 번에 하나의 프로그램만 이용할 수 있었다. 운영체제는 뭘 할까? <프로세스 주소공간> 높은 주소 낮은 주소 … … <물리 메모리 주소공간> …
  • 59. • 운영체제가 제공하는 추상화 – 가상 메모리 • 한 번에 많은 프로그램을 사용하고 싶다. • 프로세스가 필요로 하는 데이터 중에서 일부 당장 필요한 데이터만 램에 올려 두는 방식으로 램을 아낀다. • 아껴진 공간에 다른 프로그램의 데이터를 올린다. • 프로세스에서 사용하는 주소와 물리 메모리의 주소는 일치하지 않는다. • 프로세스는 0부터 2^32까지의 가상의 메모리 주소를 이용하여 데이터의 논리적 위치를 정한다. • 앞의 예에서는 서랍이라는 물리적 공간이 있었다. 서랍의 크기에 맞춰 크기 100의 표를 만들었다. • 32비트 기준, 가상 메모리에서는 2^32크기의 가상의 공간을 가정하고 주소를 만든다. 가상의 서랍… • 램에 올라오지 않은 데이터는 하드 디스크 등 저장장치에 저장된다. • 가상 주소를 변환해주는 하드웨어와 OS를 이용하여 적절한 물리 메모리의 주소를 얻는다. 운영체제는 뭘 할까? <프로세스 A의 주소공간> … … <물리 메모리 주소공간> … <프로세스 B의 주소공간>
  • 60. 운영체제는 뭘 할까? <프로세스 A의 주소공간> … … <물리 메모리 주소공간> … <프로세스 B의 주소공간> 가상 주소 램에 있음? 물리 주소 사용 함? ... … … ... 0x40000000 ㅇㅇ 0x23456000 ㅇㅇ … … … ... 0x50000000 (비어 있음) ㄴㄴ NULL ㄴㄴ … … … ... 0x50001000 ㄴㄴ NULL (하드에서 찾음) ㅇㅇ … … … ... 0x60000000 ㅇㅇ 0xABCD0000 ㅇㅇ <프로세스 A의 관리 테이블> * 이 예는 매우 약식이며 실제 방법과는 차이가 있음 실제로는 훨씬 구체적이다.
  • 61. • 운영체제가 제공하는 추상화 – 가상 메모리 • 가상 메모리 : 각 프로그램에게 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식을 말한다. • 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공해준다. • 프로세스가 사용하는 주소는 가상메모리의 주소이다. 이 주소를 물리 메모리 주소로 번역하여 사용한다. • 프로그램과 프로그래머는 0부터 2^32까지 연속적인 주소를 가진 공간을 독차지하고 쓴다고 생각할 수 있다. • 실제 물리 메모리의 어디에 있는지는 상관할 필요가 없다. • 추가적으로, 주소를 번역할 때 그 주소가 가진 권한을 체크하여 잘못된 접근으로부터 방어한다. • 실제 물리 메모리에 프로세스가 사용하는 모든 데이터를 올려놓지는 않는다. • 당장 필요한 데이터만 올려놓고, 당장 쓰지 않는 부분은 디스크에 저장해 둔다. • 실제 메모리 크기보다 큰 공간이 있는 것처럼 사용할 수 있다. • 프로세스의 사적 공간을 유지/보호하면서도 공유할 필요가 있는 데이터는 공유할 수 있다. • 서로 다른 가상 주소를 쓰더라도 은 물리 주소로 번역해 주면 공유된다. 운영체제는 뭘 할까?
  • 62. • 운영체제가 제공하는 추상화 – 가상 메모리 • 9장에서 자세히 다룰 것임 • 가상 주소 -> 물리 주소 변환되는 과정 • 램에 올리지 않은 페이지를 가져오는 과정 • 램에 자리가 없을 때, 다른 페이지를 쫓아내고 자리를 만드는 과정 • 기타 메모리 관리, 보호 방법 • … 운영체제는 뭘 할까?
  • 63. • 운영체제가 제공하는 추상화 – 파일 • 파일 • 연속된 바이트들 • 일반 파일 뿐만 아니라 네트워크 등에 들어오는 보내는 정보들도 파일에서 읽고 쓰는 것이라 추상화 한다. (실제로 사용법도 비슷함) • 키보드, 프린터, 하드디스크, 사운드 카드 등 모든 I/O device를 파일로 취급한다. • 파일 I/O에 사용하는 함수(read/write)를 그대로 사용함 • 연속된 바이트들을 키보드에서 읽는다고(read) 생각. • 연속된 바이트들을 프린터에 쓴다고(write) 생각. • 연속된 바이트들을 네트워크에 쓰고 읽는다고 생각. • 이렇게 다양한 입출력장치들의 통일된 뷰(view)를 제공 • 특정 I/O device의 기술에 대해 몰라도 쉽게 사용할 수 있다. 운영체제는 뭘 할까? CPU Main Memory I/O devices Virtual Memory File Processes
  • 64. • 운영체제가 제공하는 추상화 – 파일 • 파일의 종류 • 일반 데이터 파일 • 디렉토리 파일 • 디바이스 파일(특수 파일) • 물리적인 입출력장치들을 참조하는 파일 • 소켓 • 네트워크상의 다른 프로세스와 통신하기 위해 사용하는 파일 운영체제는 뭘 할까?
  • 65. • 운영체제가 제공하는 추상화 – 파일 • 파일 시스템 : 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제 • 파일에 읽고 쓰기 위해서는 파일을 찾아야 한다. • 대부분 OS는 파일들을 그룹화하는 방법의 하나로 디렉터리(폴더)라는 개념을 지원한다. • 옆의 그림에서 직사각형은 폴더, 원은 파일들 • 파일 시스템 종류에 따라 관리 방법이 다르다. • FAT32, NTFS 등 • 파일 시스템마다 각자 장단점이 있음 • 어떤 파일 시스템을 택할지는 보통 사용자가 결정할 수 있음. • 옆의 사진 – USB를 포맷하며 어떤 파일 시스템을 이용하는 USB로 초기화 할 것인지 선택한다. • 포맷 : 원래는 저장장치에 자료를 저장할 수 있도록 형식(파일 시스템)을 잡아주는 것을 뜻한다. • 새로 파일 시스템을 잡으면 내용물이 사라지므로 초기화와 같은 의미로 쓰이곤 함. 운영체제는 뭘 할까?
  • 66. • 운영체제가 제공하는 추상화 – 파일 • 10장에서 자세히 다룰 것임 • 파일은 어떻게 저장되는가? • 폴더는 어떻게 구현되어 있는가? • 유명한 파일 시스템들 • … 운영체제는 뭘 할까?
  • 67. 운영체제는 뭘 할까? • 하드웨어 자원 관리 • 3개의 프로그램이 프린터에 출력을 원한다고 가정하자. • 관리가 안 된다면, A 프로그램이 몇 줄 출력하고, B 프로그램이 몇 줄 출력하고, C 프로그램이 몇 줄 출력해서 난리가 날 것이다. • 이러한 상황이 생기지 않도록 운영체제에서 하드웨어 자원을 관리해 준다. • A 프로그램이 프린터 출력을 요청하면 일을 실행해 준다. 이 때 B 프로그램과 C 프로그램이 프린터 출력을 요청하면 이들의 요청을 디스크 에 버퍼링해 둔다. A의 일이 끝나면 B의 요청을 프린터에게 보내고, B가 끝나면 C를 보낸다. • 운영체제는 어떤 프로그램들이 어떤 자원을 사용하고 있는 지 확인하고, 자원에 대한 요청을 받아들이고, 자 원 사용에 대한 관리를 하고, 다른 프로그램과 사용자들로부터 오는 요청들의 충돌을 중재한다.
  • 68. 운영체제는 뭘 할까? • 하드웨어 자원 관리 • 자원 분배 • 시간 멀티플렉싱 • 자원을 돌아가면서 사용한다. • 예) CPU를 여러 프로세스가 돌아가며 사용한다. • 공간 멀티플렉싱 • 자원의 일부를 사용한다. • 예) 램의 일부를 사용한다. • 누가 얼마나 할당되는가, 다음 차례는 누구 인가는 OS가 결정한다. • 자원 보호 • 다른 프로그램이 사용하는 자원에 침범할 수 없도록 보호한다
  • 69. 운영체제는 뭘 할까? • 하드웨어 자원 관리 • 프로그램이 키보드나 디스플레이, 디스크나 메인 메모리를 직접 접근하지 않는다. • 운영체제가 제공하는 서비스를 이용하여 접근한다. • Ex) 문자열 출력 시 printf 함수를 호출하여 출력한다. printf 함수 내부에는 운영체제가 제공하는 서비스를 이용하는 코드가 들어있다. • 운영체제가 제공하는 서비스는 시스템 콜을 이용하여 요청할 수 있다. • 하드웨어를 이용하는 라이브러리 함수는 시스템 콜을 하는 코드를 포함한다. • Ex) printf(화면이나 파일로 출력), write(파일로 출력), read(파일로부터 입력)…
  • 70. • 시스템 콜 (System call) • OS의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 • 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다. • 시스템 콜을 하면 사용자 모드에서 커널 모드로 바뀐다. • 커널에서 시스템 콜 처리가 끝나면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다. 운영체제는 뭘 할까?
  • 71. • 시스템 콜 (System call) • User 모드에서는 CPU가 제공하는 모든 명령어를 사용할 수는 없다. 몇 가지 사용할 수 없는 명령어가 있다. • 즉, OS만이 사용할 수 있는 명령어가 있다. • 되는 것, 안 되는 것은 해당 CPU 매뉴얼에 적혀 있음 (보통 하드웨어 접근에 관련된 것) • User 모드에서는 할 수 없는 일을 처리하기 위해 OS에게 서비스를 요청하면(시스템 콜을 하면) Kernel 모드로 전환된다. • Kernel이란? • OS 코드와 데이터이며, 메모리에 상주한다. • 모든 프로세스를 관리하기 위해 시스템이 이용하는 코드와 자료구조의 집합 • 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 서비스를 제공한다 • Kernel 모드에서는 모든 하드웨어에 접근 가능, 모든 메모리 접근 가능, CPU에서 사용 가능한 모든 명령어 사용 가능하다. 운영체제는 뭘 할까? software hardware User 모드 Kernel 모드
  • 72. • 하드웨어 자원 관리 • 앞에서 나온 여러 기법들을 이용하여 관리한다. (가상 메모리 등) • 추가적으로 스케줄링, 시스템 콜 등을 공부할 것 • 스케줄링 : 자원을 누구에게 줄지 결정하는 것 – 12장 할 때 같이 다루겠음 • 시스템 콜 : 운영체제에게 서비스를 요청하는 것 – 8장에서 다루겠음 • … 운영체제는 뭘 할까?
  • 73. • 시스템의 관점에서 네트워크는 단지 또 다른 I/O device이다 • 읽어오는 데 시간이 아주 많이 걸리는 하드 디스크와 비슷하다 • OS가 제공하는 서비스를 이용하여 통신을 요청할 수 있다. 시스템은 네트워크를 사용하여 다른 시스템과 통신한다
  • 74. • 네트워크 프로그래밍 • 11장에서 다룸 • 네트워크를 공부해야 이해하기 쉬움 • 스터디에서는 다루지 않음 시스템은 네트워크를 사용하여 다른 시스템과 통신한다
  • 75. • 컴퓨터에서 어떻게 동시에 여러 일을 하는가 • 어떻게 시스템을 보다 빠르게(병렬적으로) 만드는가 • 여러가지 방법이 있다. • 프로세스 이용 • 스레드(Thread) 이용 • 프로세스 내에서 실행되는 흐름의 단위 • 프로세스의 컨텍스트 내에서 돌아가는 논리 흐름 • 코드와 데이터를 공유하면서도 자신만의 지역변수 영역(스택)이 있음 • 잘 조작하면 스레드 고유 스택도 접근 가능 • 같은 가상메모리를 공유함 • … 동시성과 병렬성
  • 76. • 동시성 프로그래밍 • 12장에서 다룰 것 • 동시에 일을 수행하게 하는 여러가지 방법 • 어떻게 프로세스/스레드를 관리하는가 • 동기화 하는 법 • Dead lock (교착상태) • … 동시성과 병렬성
  • 78. 참고 사이트 • 전처리기, 컴파일러, 어셈블러, 링커를 따로 실행하고 싶을 시 쓰는 gcc 명령어 • http://air802.tistory.com/13