Computer Science/Operating System 10

[운영체제] 가상 메모리의 이해

가상 메모리(Virtual Memory) 리눅스의 각 프로세스마다 4GB를 차지한다. 그런데 통상 메모리는 16GB? 정도인 것도 있고, 코드는 메모리에 반드시 있어야 하는데 여러개의 프로세스들 실행할 때 메모리 크기의 한계를 어떻게 극복할 수 있을까? 즉 어떻게 하면 한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 메모리 구조를 가져갈 것인가? 이때 활용하는 것이 가상 메모리이다. 또한 가상 메모리를 통해 프로세스간 공간 분리로 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있다. 가상 메모리의 기본 아이디어는 프로세스는 가상 주소를 사용하고, 데이터를 사용(읽고/쓰기) 할 때 물리 주소로 변환해주면 된다는 것이다. 즉, 가상 메모리 시스템을 사용하기 위해서는 가상 주소(virtual add..

[운영체제] Semaphore와 deadlock, starvation

+ 운영체제를 공부중이고, 오늘은 Semaphore와 deadlock, starvation에 대해서 공부하였는데...ㅠ 해당 내용에 대해서는 깊은 이해가 아직 부족합니다. 앞으로 계속 보충하여 해당 포스트를 수정해 나갈 것입니다. [운영체제] Thread 여기서 thread의 동기화 이슈를 살펴보았다. 다시 한번 정리해보면, 공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다. 이를 해결하기 위한 몇가지 충족 조건 1) Mutual Exclusion 이를 해결하기 위해서는 Mutual exclusion(상호 배제)기법이 필요하다. 스레드는 프로세스의 모든 데이터에 접근 할 수 있으므로 여러 스레드가 변경하..

[운영체제] Thread

1. Processs vs Thread Process 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 즉 메모리에 올라와 실행되고 있는 독립적인 프로그램 인스턴스 Thread 프로세스 내에서 동작되는 여러 실행의 흐름 단위 Processs는 독립적, Thread는 프로세스의 서브넷 Process는 각각 독립적인 자원을 가진다. Thread는 프로세스의 자원을 공유한다. Process는 자신만의 주소 영역을 가진다. Thread는 주소 영역을 공유한다. Process간에는 IPC기법으로 통신해야하지만 Thread는 필요없다. (IPC에 대해서는 아직 공부가 더 필요한 상태..) 2. Thread - Light Weight Process라고도 함 - 프로세스 간에는 각 프로세스의 데이터 접근이 불가하다..

[운영체제] Process 구조, Process와 컨텍스트 스위칭

프로그램을 작성하다보면 실제 실행파일의 구조를 이해해야하는 경우가 많다. (깊게 디버깅을 해야하는 경우) 이런 경우를 위해서라도 프로세스 구조를 알아야할 필요가 있다. 프로세스의 구조 TEXT(CODE): 컴파일된 코드가 들어가는 부분 DATA: 변수/초기화된 데이터 STACK(스택 프레임): 임시 데이터(함수 호출, 로컬 변수 등) HEAP: 코드에서 동적으로 만들어지는 데이터 아래의 코드를 예시로 프로세스 구조를 그려보면 이와 같다.(단, 프로그램에서 파이썬 코드를 예시로 들었지만 C언어처럼 컴파일 된다고 가정하게 보기!) HEAP 여기서 HEAP이 코드에서 동적으로 만들어지는 메모리인데, 어떻게 만들어지고, 사용되는지 알아보자, C언어에는 malloc이라는 메서드가 있다. 이 메서드로 명시한 메모리..

[운영체제] Interrupt

인터럽트란, 어느 한 순간 CPU가 실행하는 명령은 PC(Program Counter)가 가리키는 명령 하나이다. 이렇게 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치와 커뮤니케이션 해야할 때나, 예외상황이 발생하여 처리가 필요할 경우가 생길 수 있다. 이 때 CPU에 알려서 처리하는 기수를 인터럽트라고 한다. 인터럽트의 필요성 1. 선점형 스케쥴러를 구현 하기 위해서는 프로세스 running중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스의 실행을 중단시킨다. 그러려면 스케쥴러 코드가 실행되어야 하는데, 이 때 잠시 인터럽트가 사용된다. (타이머 인터럽트) 2. I/O Device와의 커뮤니케이션 예를 들어, 저장 매체에서 데이터 처리가 완료됐을 때, ..

[운영체제] 선점형/비선점형 스케쥴러

1. 비선점형 스케쥴러(Non-preemptive Scheduling) 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음 예를 들어, CPU에 있는 A프로세스의 상태가 자체적으로 block되거나, terminated되어야만, 그제서야 스케쥴러가 B프로세스가 실행 시킬 수 있다.즉,스케쥴러가 CPU에 있는 프로세스를 선점,제어 할 수 없다. 그림으로 비선점형 스케쥴러가 작동하는 방식을 보면, 2. 선점형 스케쥴러(Preemptive Scheduling): 하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할 수 있음. 즉, 프로세스 상태가 running 중에도 스케쥴러가 이를 중단(ready) 시키고, 다른 프로세스로 교체할 수 있다. 예를 들어, 시분할 시스템같은 경우..

[운영체제] 프로세스 스케쥴링 - 배치 처리 시스템, 시분할 시스템, 멀티 태스킹

[운영체제] 운영체제의 발전사(배치 처리 시스템, 시분할 시스템, 멀티 태스킹에서 배치 처리 시스템, 시분할 시스템, 멀티 태스킹에 대해 간단히 살펴보았었다. 이제 좀 더 자세히 알아보고자 한다. 1. 배치 처리 시스템 배치 처리 시스템은 큐 자료구조와 같은 FIFO 방식이며 한번데 등록된 여러 프로그램들을 컴퓨터 프로그램의 실행 요청 순서에 따라 순차적으로 실행하는 방식이다. 그래서 일괄 처리, 배치 처리, batch processing이라고도 부른다. 하지만 이러한 방식의 치명적인 단점은 무엇일까? 1. 여러 프로그램을 순차적으로 실행시킬 수 있지만, 어떤 프로그램은 실행이 너무 시간이 많이 걸려서, 다음 프로그램이 실행되는데 너무 많은 시간을 기다려야한다. 2. 동시에 여러 응용 프로그램을 실행시킬..

[운영체제] 운영체제 구조 - 시스템콜, 사용자 모드, 커널 모드

여기서 응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스)를 도서관에 비유해보면 운영체제 - 도서관 응용 프로그램 - 시민 컴퓨터 하드웨어 - 책 - 그래서 응용 프로그램(시민)이 운영체제(도서관)에서 컴퓨터 하드웨어(자원; 책)을 요청하면 - 운영체제(도서관)은 적절한 컴퓨터 하드에어(책)을 찾아서 응용 프로그램(시민)에게 빌려줌(즉, 하드웨어를 자깐 쓸 수 있게 해준 뒤) - 응용 프로그램(시민)이 사용할 기간이 다 되면, 운영체제(도서관)이 해당 컴퓨터 하드에어(책)을 회수한다. 이렇듯 응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스)의 관계를 다시 설명하면, - 운영체제는 응용 프로그램이 요쳥하는 메모리를 허가하고, 분배한다. - 운영체제는 응용 프로그램이 요청하는 CPU 시간을 ..

[운영체제] 운영체제의 발전사(배치 처리 시스템, 시분할 시스템, 멀티 태스킹)

운영체제의 발전사를 보면서 각각의 운영체제의 기능들이 어떻게 발전해왔는지, 어떤 트렌드가 있었는지 알아보았다. 1950년대) ENIAC: 첫 번째 컴퓨터 이 때는 운영체제가 없었다. 1개의 응용 프로그램을 실행시키기도 바빴으려 이 응용 프로그램이 직접 시스템 자원을 제어하였다. 1960년대 초기) 이 때는 프로그램 종류도 많아지고, 사용자도 슬슬 많아지기 시작했다. 예를들어, 철수가 '예상 실행 시간이 12 시간'인 을 실행하고자 하며, 영희가 '예상 실행 시간이 1분'인 를 실행하고자 한다. 이 때 철수가 먼저 프로그램1을 실행시킨다면 영희는 1분 만에 끝나는 작업임에도 불구하고 철수의 프로그램이 다 끝날 때까지 직접 뜬 눈으로 기다려한다. 이러한 불편함을 해결하기 위해 을 기반으로 하는 운영체제가 출..

[운영체제] 운영체제의 역할

대표적인 운영체제로는 Windows OS, Mac OS, UNIX계열 OS가 있다. UNIX계열의 OS는 UNIX와 사용법이나 OS구조가 유사한 것들을 말하며 이 중 가장 유명한 것이 LINUX OS이다. (프로그래머, 전공자라면 이 LINUX OS에 대해 잘 알고 있어야 한다. 이에 대한 내용은 추후에 를 다 공부한 후 을 배우면서 공부해볼 것이다.) 운영체제(Operating System; OS)의 역할 1. 시스템 자원(System Resource) 관리자 여기서 시스템 자원이라는 것은 컴퓨터 하드웨어라고 보면 쉽다. 이런 시스템 자원들은 자신 혼자서는 아무것도 할 수 없으며 이런 것들을 관리하는 소프트웨어가 OS이다. 예를 들어, - CPU(중앙처리장치) => 각 프로그램이 얼마나 CPU를 사용할..