반응형
SMALL

'운영체제 '에 해당되는 글 10건

반응형
LIST

CPU 스케줄링

운영체제 2017. 8. 5. 22:00
반응형
SMALL

CPU 스케줄링은 OS공부에 있어서 가장 중요한 파트라고 생각한다. 학부 교수님도 많이 강조하고 실제 대학원 면접이나 IT회사 면접에 갔을시 물어볼법한 중요한 내용이다.


1. CPU-입출력 버스트 사이클

- 프로세스 실행은 CPU버스트로 시작이 된다.

- 뒤이어 입출력버스트가 발생한다.

- 그 뒤에 또 다른 CPU버스트가 발생하며  마지막 CPU 버스트는 실행을 종료하기 위한 시스템 요청과 함께 끝난다.


<CPU -입출력 버스트의 실행 과정>



2. CPU 스케줄러


   -  단기스케쥴러(또는 CPU 스케쥴러)에 의해 실행한다.

   -  CPU가 유휴 상태가 될 때마다 운영체제는 준비 큐에 있는 프로세스들(PCB) 중에서 하나를 선택하여 할당한다.

       -  준비완료 큐에 있는 모든 프로세스들은 CPU에서 실행이 될 기회를 기다리며 대기하고 있다.


 


<CPU 버스트 시간의 도표>





3. 선점스케줄링과 비선점 스케줄링



* 선점스케줄링


-  우선순위가 높은 프로세스들부터 처리가 가능하다. 

-  빠른 응답시간을 처리하는 시스템에서 사용되며 유리하다.

-  현재 window, machintosh에서도 사용하고 있는 스케줄링 방법이다.

-  1) 실행 상태 -> 대기 상태,  ex) 입출력 요청, 자식 프로세스의 종료를 기다리는 호출

   2) 실행 상태 -> 준비 상태,  ex) 인터럽트 발생

   3) 대기 상태 -> 준비 상태,  ex) 입출력의 종료

   4) 실행 상태 -> 종료 상태,  ex) 프로세스의 종료


이런식으로 될때 1~4번까지 모두 실행이 가능한게 선점스케줄링 방식이고, 단점으론 오버헤드가 증가한다는 점이다.


* 비선점스케줄링

- 이미 할당된 자원을 다른 프로세스가 강탈할 수 없다.

- 응답시간 예측이 엄청 편하고 일괄처리 할 때 유용하다.

- 우선순위가 높은 프로세스들부터 처리하는게 아닌 순서대로 들어온대로 처리하기 때문에 우선순위로 처리되어야      하는게 안된다는 단점이 있다.

- 위에서 쓴 1~4번들중에 1, 4번에 해당이 되면 비선점 스케줄링 방식이다.


4. 디스패처


- CPU의 제어를 단기 스케쥴러가 선택한 프로세스에게 부여하는 모듈이다.

- 문맥을 교환한다.

- 사용자 모드로 전환하는 일을 하며 프로그램을 다시 시작하기 위해 사용자 프로그램의 위치로 적절히 이동하는 일을 한다.

- 디스패처는 모든 프로세스의 문맥교환시 호출되기 때문에 가능한 한 빨라야한다.

- 디스패처가 하나의 프로세스를 중단시키고 다른 프로세스를 실행하는데까지 걸리는 시간을 디스패처 지연이라고 말한다.


반응형
LIST

'운영체제 ' 카테고리의 다른 글

프로세스의 정의  (0) 2017.06.29
명령해석기  (0) 2017.01.30
운영체제서비스  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
블로그 이미지

만년필석사

,
반응형
SMALL

오늘은 프로세스에 대해 포스팅해보려고 한다. 이러저러 블로그 찾아보고 OS책 따로보고 알게된 것들을 간추려서 써보려고 한다.


1. 프로세스란?

말그대로 실행중인 프로그램을 말한다. 프로그램 카운터의 값과 처리기 레지스터 내용으로 대표되는 현재 활동을 포함하고 있다.


2. 메모리상의 프로세스 구조


- 프로세스 스택: 함수의 매개변수, 복귀 주소, 로컬 변수와 같은 임시적인 자료를 가지는 공간이다.

- 데이터 섹션: 전역변수들을 수록하는 공간이다.

- 힙: 프로세스 실행중에 동적으로 할당하는 메모리 공간이다.



                    <메모리 상의 프로세스>


하나 더 말하자면 프로그램과 프로세스는 엄연히 다른거다. 가끔 이게 같다고 하는 사람들도 존재하는데-_-;; 어떤차이인지 좀 제대로 알고 말했으면 좋겠다.. 프로그램은 명령어 리스트를 내용으로 가진 디스크에 저장된 파일, 즉 실행파일   이라고 불리는 수동적인 존재이다. 반면 프로세스는 그 프로그램을 실행중인 것이다. 좀더 이야기하면 다음에 실행할  명령어를 지정하는 프로그램 카운터 및 관련된 자원의 집합을 가진 능동적인 존재이다.



3. 프로세스 상태


 프로세스는 실행되면서 상태가 변하게 되는데 5가지 상태가 있다.


- 새로운(new): 프로세스가 생성중이다.

- 실행(running): 명령어들이 실행되고 있는 중이다.

- 대기(waiting): 프로세스가 어떤사건이 일어나길 기다리고 있는 상태이다.

- 준비완료(ready): 프로세스가 처리기에 할당되기를 기다린다.

- 종료(terminated): 프로세스가 실행을 종료한다.


대강 이정도 5가지 상태가 있지만 운영체제마다 조금씩 다르므로 그건 OS에 따라 공부해 보면 될 것 같다. 하지만 이름만 다를뿐 전체적인 큰 그림은 거의 유사하다. 아래 사진은 프로세스가 어떻게 실행되는지에 대해 자세히 나타낸 그림이니 한번 참고하길 바란다.



4. PCB(프로세스 제어 블록)


이건 내가 컨텍스트스위칭 공부했을때 한번 포스팅 해놓긴 한거 같았는데 그래도 한번 더 포스팅 해보려고 한다. 컴퓨터공학과 전공자고 운영체제를 한번이라도 해봤으면 알겠지만 프로세스 제어블록은 특정 프로세스하고 연관된 여러정보를 수록하는 공간을 의미한다. 프로세스 제어 블록의 구조에 대해 조금 더 알아보겠다.


- 프로세스 상태: 새로운, 준비완료, 실행, 대기, 정지 상태를 의미한다.

- 프로그램 카운터: 이 프로세스가 다음의 실행할 명령어의 주소를 가리킨다.(학부때 컴퓨터구조론시간에도 배웠을꺼다)

- CPU의 레지스터: 누산기, 인덱스 레지스터, 스택 레지스터, 범용레지스터들과 상태코드의 정보가 포함되는 곳이다. 추가적으로 상태정보에 대해 좀 더 이야기하자면 인터럽트 발생시에 프로그램 카운터와 함께 저장어야 하고 처리후에는 프로세스가 중단된 지점으로부터 올바르게 실행할 수 있게 해야 한다.

- CPU-스케줄링정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수들을 포함하는 곳이다. 말대로 스케줄링에 관련된 정보들을 포함하는 곳이다.

- 메모리 관련 정보: 여기에는 메모리 시스템에 따라 기준레지스터, 한계레지스터값, 세그먼트들과 같은 정보를 포함한다.

- 회계정보: CPU가 사용한 양과 사용된 실제시간, 시간제한, 잡 등을 포함하고 있다.

- 입출력 상태 정보: 이 프로세스에 할당된 입출력장치들과 열린 파일의 목록 등을 포함한다.


<PCB의 구조>

<사진참조: google>



반응형
LIST

'운영체제 ' 카테고리의 다른 글

CPU 스케줄링  (0) 2017.08.05
명령해석기  (0) 2017.01.30
운영체제서비스  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
블로그 이미지

만년필석사

,

명령해석기

운영체제 2017. 1. 30. 23:05
반응형
SMALL

이번엔 명령해석기에 대해 포스팅 해보려고 하는데 이해하기가 좀 어려웠던 내용이 있었다. 그래서 이해한 부분을 써보려고 한다.


1. 명령해석기란?


- 운영체제마다 좀 다른곳에 설치가 되어있는데, 어떤 os에는 커널안에 있는 경우가 있고 윈도우나 unix같은 경우엔 명령해석기자체를 사용자가 처음 로그온 할 때 특수한 프로그램으로 취급한다. 여러명령어를 제공하는 시스템에서는 이 해석기를 쉘이라고 부른다.

- 셸도 엄청 다양하게 있는데 기능은 좀 유사한 경우가 많고 이건 좀 개인의 취향대로 셸을 쓸 수 있기 때문에 뭐가 좋다 안좋다라고 이야기 할 수는 없는 것 같다.


2. 명령해석기의 핵심


- 명령해석기의 핵심은 사용자가 지정한 명령을 가져와서 그것을 실행하는 것이다.

- MS-DOS나 UNIX 셸 같은 경우는 생성, 삭제, 리스트, 복사, 실행 등을 하는 방식으로 실행된다.

- 명령해석기의 많은 명령어에 의해 파일이 조작될 수 있다.


3. 명령해석기의 구현


명령어 해석기 구현방식에는 두가지가 있다. 

- 명령 해석기 자체가 명령을 실행할 코드를 갖고 있는 경우이다. 예를 하나 들어보면 파일을 삭제하기 위해 명령어를 입력하게 되면 명령해석기는 자신의 코드의 한 부분으로 분기하고 이 코드 부분이 매개변수를 설정하고 적절한 시스템 호출을 하게 된다.

- 시스템 프로그램에 의해서 대부분의 명령을 구현하는 것이다. 이 경우에는  메모리에 적재되어 실행할 파일을 식별하기 위해 명령을 사용하게 된다. 한가지 예를 들어보면 파일을 삭제하는 unix명령어 중에 rm이라는 것이 있고  file.txt를 삭제한다고 가정했을때 rm file.txt라고 입력하게 된다. 명령해석기는 rm이라는 명령어가 들어오면 rm이라는 명령어파일을 찾아 메모리에 적재하고 그것을 매개변수인 file.txt로 실행한다. 매개변수가 실행되면서 매개변수는 rm이라는 파일 내의 코드로 자리잡게 되면서 자연스럽게 삭제가 된다. 좀 말이 어려울 수도 있는데 일단 내가 이해한 부분은 이렇다.


대강 내가 명령해석기에 대해 이해한 부분은 이런데 말이 좀 어려운 부분도 있을 것이다. 명령해석기라는게 깊게 이해하려다 보면 쉬운 부분은 아니었어서 os책을 몇번을 읽고 구글도 찾아보면서 공부했다. 구글에도 더 좋은 내용이 있으니 찾아보면서 공부하면 더 좋을 것 같다.


반응형
LIST

'운영체제 ' 카테고리의 다른 글

CPU 스케줄링  (0) 2017.08.05
프로세스의 정의  (0) 2017.06.29
운영체제서비스  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
블로그 이미지

만년필석사

,
반응형
SMALL

오늘은 운영체제서비스에 대해 포스팅해보려고 한다. 처음엔 용어도 생소하고 처음보는 내용이 많아서 몇번 읽어봤었다. 생각보다 어려운 내용은 아니었다.


1. 운영체제 서비스 구성


운영체제는 프로그램 실행환경을 제공하고 프로그램과 프로그램의 사용자에게 어떤 서비스를 제공하기도 한다. 아래 사진을 보면 운영체제 서비스가 어떤식으로 이루어져 있는지 대강 알 수 있다. 운영체제 서비스는 프로그래머에게 편하게 프로그래밍을 할 수 있도록 지원해주기도 한다.

    <운영체제 서비스 구조>

<사진출저: operating systems>


① 사용자 인터페이스(user interface): 윈도우os든 mac os든 대부분의 os는 사용자 인터페이스를 제공한다. 사용자 인터페이스는 크게 세분류로 나눌 수 있다. 하나는 명령어 라인 인터페이스(CLI)로서 명령어의 입력과 편집을 가능하게 해준다. 또 하나는 명령어와 명령어를 제어하는 디렉티브가 파일형태로 입력되고 그 파일이 실행되는 배치 인터페이스이다. 또하나는 GUI모드인데 이게 가장 보편적으로 많이 쓰인다. 입출력을 지시하고, 메뉴를 선택하는 지시장치와 문자열을 입력하는 키보드를 포함한 시스템을 말한다. 요즘은 윈도우 os든 mac os든 우분투 os든 전부 GUI방식을 채택하고 있고 어떤 os들은 앞서말한 3가지를 모두 사용하기도 한다. 

② 프로그램 실행: 시스템은 프로그램을 메모리에 적재시켜 실행한다. 

③ 입출력 연산(I/O): 실행중인 프로그램은 입출력을 요구할 수 있다. 모든 프로그램 실행은 입출력과 연관이 있다. 사용자들은 입출력연산의 효율성을 위해서 입출력장치를 제어할 수 없는게 특징이다.

④ 파일 시스템의 조작: 파일시스템은 운영체제 서비스 중에서 가장 중요한 위치에 속한다. 프로그램은 파일을 읽고 쓸 수 있는데 프로그램은 파일을 삭제하고 복구하고 지정된 파일을 찾고 파일의 정보도 열거를 할 수 있어야 한다. 또한 파일의 권한관리를 이용해서 파일이나 디렉터리에 접근을 허가하기도 하고 거부하기도 하는데 이러한 모든 파일시스템을 제어가 가능하게 만들어 주는 서비스가 파일시스템이다. 

⑤ 통신: 프로세스와 다른 프로세스가 정보를 교환할때 쓰는 서비스이며 컴퓨터 네트워크가 한번에 묶여있을때, 똑같은 컴퓨터에서 실행되는 프로세스들과의 정보교환 등이 일어날때 사용되는 서비스이다.

⑥ 오류탐지: 운영체제에서 일어날 수 있는 오류를 탐지해주는 서비스이다. 항상 어떤 오류라도 대비를 하고 있어야 하는 것이 운영체제의 또하나의 역할이기도 하다. 예를 들면 입출력장치 오류중에서도 네트워크접속실패, 프린터 종이부족 같은 것들이 있을 수 있는데 이러한 오류를 캐치해줄때 사용되는 서비스가 오류탐지 기능이다. 오류는 이것말고도 많다. 연산오버플로우, 불법적 메모리위치에서 접근시도 등등 무궁무진한 오류가 있다.

⑦ 자원할당(Resource alocation): 다수의 사용자나 다수의 작업들(프로그램)이 동시에 실행될 때 각각의 자원을 할당해 주는 서비스이다. 주메모리, 파일저장장치같은 것들은 특수한 자원할당 코드를 받을 수 있고 입출력장치들은 일반적인 자원할당을 받고 받을 수 있는 자원할당들이 조금씩 틀리다. 

⑧ 회계: 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용하고자 하는지에 대해 관리하는 서비스이다. 

⑨ 보호와 보안(seruity): 네트워크에 연결된 컴퓨터시스템에 저장된 정보의 소유자는 정보의 사용을 통제할 수 있다. 보호는 시스템자원에 대한 모든것을 통제가 가능할 수 있도록 보장된다. 사용자가 사용하는 모든 프로그램, 자원들을 외부에 누군가가 접근할 수 없도록 하는 것이 보안이다. 패스워드를 걸어서 시스템에서 자기 자신을 인증을 해야만 시스템에 접근을 허가될 수 있도록 운영체제에서 서비스하고 있다. 항상 보안이 뚫리지 않도록 컴퓨터를 잘 관리하는 것도 본인의 능력이다.



반응형
LIST

'운영체제 ' 카테고리의 다른 글

프로세스의 정의  (0) 2017.06.29
명령해석기  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
임계구역(Critical section)  (0) 2016.09.11
블로그 이미지

만년필석사

,
반응형
SMALL

오늘은 이중동작모드에 대해 포스팅해보려고 한다. 이걸 이해하는데 솔직히 좀 시간이 걸렸다. 생소한 용어기도 하고.. 전개되는 과정이 생각보다 많이 복잡해서 개인적으로 시간이 좀 걸렸다. 


1. 이중동작모드란?


- 쉽게 말해 운영체제를 보호하기 위한 기법으로 사용자모드와 커널모드 이 2가지로 분류가 된다. 사용자모드에서 불법적인 명령을 통해 운영체제를 해킹하고 시스템의 위협을 방지하기 위해 사용자모드와 커널모드로 분류해서 운영체제를 운영할 수 있게 했다.

- 사용자모드에서 불법적인 명령을 실행하게 되면 하드웨어는 운영체제로 트랩을 발생시키게 되면서 커널모드에 접근할 수 없다.


2. 이중동작모드의 구조?


<출저: operating system concept>


- 사용자모드와 커널모드로 구분할 수 있으며 운영체제를 위한 작업과 사용자를 위한 작업을 할 수 있다. 모드비트라는 비트가 추가되었는데 하나의비트가 현재의모드를 나타내기 위해 추가되었다. 사용자모드로 전환되면 모드비트가 1이 되고 커널모드로 전환되면 모드비트는 0이된다.

- 컴퓨터시스템에서 사용자 응용을 위해 사용되는 거라면 사용자모드로 유지하게 되지만 사용자응용이 운영체제로부터 서비스를 요청하게 된다면 커널모드로 전환이 된다.(모드비트가 0이됨)

- 또하나 공부한 것은 시스템 부팅시 하드웨어는 커널모드에서 시작되는데 그다음은 운영체제가 적재되고 사용자모드에서 사용자프로세스가 시작되게 된다. 트랩이나 인터럽트가 발생할때마다 하드웨어는 커널모드로 전환을 하게 된다. 그래서 대표적으로 컴퓨터가 제어를 얻을때 항상 커널모드로 있게 된다.

- 사용자모드에서 불법적인 명령을 실행하지 못하게 해놓음으로써 하드웨어는 커널모드에서만 특정한 명령이 실행될 수 있게끔 해놨다. 결국 해커들이 시스템쪽 해킹을 하려면 커널모드 보안부터 뚫어야 가능하다는 이야기인데 과연 빌게이츠가 그렇게 허무하게 뚫리게 윈도우os를 만들었을지는 상상에 맡기고 싶었다.

- 결론적으로 사용자모드에서 특권명령을 시도하려고 들면 하드웨어는 이를 실행하지 않고 불법명령으로 간주해버리고 운영체제에 트랩을 건다. 


3. 시스템 호출이란?

- 응용프로그램의 요청에 따라 커널에 접근하려는 인터페이스

- 시스템호출은 컴퓨터시스템의 처리기가 지원하는 기능에 따라 다양하게 호출된다.

- 운영체제에 의해 실행될 동작을 사용자 프로세스가 요청할 수 있게 하는것이 시스템 호출이다.

- 인터럽트 벡터의 특정위치로 트랩을 거는 형태를 취한다.


* 커널모드에서 시스템호출을 받게 되면 어떤 인터럽트가 발생이 되었는지, 어떤 명령이 왔는지 인지하고 검사를 하는 과정을 거친다. 이때 전달된 인자가 사용자 프로그램이 요청하는 서비스 타입을 표시하게 된다. 커널은 항상 이렇게 정확하게 인자를 합법적인지 검증하고 검사하는 절차를 거치고나서 제어를 시스템호출 다음 명령으로 복귀시킨다.




반응형
LIST

'운영체제 ' 카테고리의 다른 글

명령해석기  (0) 2017.01.30
운영체제서비스  (0) 2017.01.30
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
임계구역(Critical section)  (0) 2016.09.11
Context Switching  (0) 2016.09.08
블로그 이미지

만년필석사

,
반응형
SMALL

이번시간엔 멀티프로세싱이라는 개념을 포스팅해보려고 한다. 정보처리산업기사,기사공부를 하다보면 운영체제(4과목)에서 등장하는 개념이다. 자격증시험에서도 중요하게 다루어지고 있고 회사면접을 갔을때도 물어볼 수 있는 단골개념이다. 이처럼 중요한 개념이지만 4년제 컴퓨터공학과를 졸업한 학생들에게 물어보면 대다수의 학생들이 잘모른다는 이야기를 얼핏 들은 적이 있다. 그래서 내가 공부를 한 것을 바탕으로 글을쓴다.




◎ 멀티프로세싱이란?


멀티프로세싱이라고 하면 무엇이 떠오를까? 아마 용어자체의 의미에서 눈치를 챘을 수도 있다. 바로 프로세서가 서로 협력해서 일을 하는 과정이다. 소수의 프로세서를 처리할때는 단일 프로세서가 더 빠를 수도 있겠지만 사실 컴퓨터를 쓰다보면 엄청 많은 프로세서를 볼 수 있다. 그래서 많은 프로세서를 처리할때는 멀티프로세서가 훨씬 빠르다. 그럼 처리를 할때는 어떤식으로 처리를 할까? 멀티프로세서는 주로 병렬식으로 처리하는 방법을 쓰고 있다. 다음 그림을 보면 이해가 쉽게 될 수 있다.


<사진출저: 유자차 한 스푼>



위에 그림에 잘 나와있듯이 병렬처리방식으로 처리하고 있다. 근데 그림을 자세히 보면 한번에 한가지일을 맡아서 처리하는게 아니라 서로 도와주면서 처리한다는 걸 보여주고있다. 멀티프로세서는 서로 일을 분산해서 처리할 뿐만아니라 서로 도와주면서 처리하기 때문에 더 효용성이 높을 수 밖에 없다. 또한 만약 시스템이 정지가 되어도 프로세스가 다 분산이 되어있기 때문에 시스템이 다운되지 않는다. 단지 조금 느려질 뿐이다. 이처럼 신뢰성이 보장되기 때문에 멀티프로세스를 널리 사용한다. 그리고 비용면에서도 단일프로세스에 비해 저렴하다. 이러한 이유가 프로세스는 단일장치, 대용량 저장장치, 전원공급장치를 공유하고 있기때문에 비용이 저렴하다. 한마디로 서로 공유하고 도와주면 처리시간도 단축되고, 비용이 절감이 된다.










반응형
LIST

'운영체제 ' 카테고리의 다른 글

운영체제서비스  (0) 2017.01.30
이중동작모드(Dual-Mode operation)  (0) 2017.01.15
임계구역(Critical section)  (0) 2016.09.11
Context Switching  (0) 2016.09.08
DeadLock 특징들  (0) 2016.08.19
블로그 이미지

만년필석사

,
반응형
SMALL

이번시간엔 임계구역에 대해 포스팅 해보려고 한다. 사실 임계구역이라는 개념은 조금만 이해해보면 간단한 개념이다.

그럼 임계구역이라는게 어떤것인지 살펴보자.


1. 임계구역이란?


임계구역이란 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 쉽게말해 임계영역에 접근하려고 하는 스레드들은 동시에 임계영역에 접근할 수 없다는 이야기이다. 한 임계구역당 하나의 스레드만이 접근을 할 수 있다.


2. 임계구역의 동기화?


동기화(asynchronous)라는 용어에 정의에 대해서 알고 있는가? 흔히 동기화라 하면 어떤걸 일치시켜준다는 의미로 널리 쓰인다. 하지만 임계구역에서의 동기화의 의미는 기존에 쓰였던것과는 약간 다르다. 임계구역에 접근하는 스레드 순서가 잘 지켜지고 있는지에 대한 의미이다. 1번에서도 설명했듯이 임계구역엔 동시에 여러 스레드가 접근하지 못한다. 그러기때문에 스레드도 들어오는 순서가 있고 그 순서가 잘 지켜져야 원활하게 수행이 된다. 


사실 이렇게 말로만 풀어서는 임계구역이 정확히 뭔지에 대한 파악은 좀 어렵고 감이 안올 수 있다. 아래의 그림을 보자.




 임계영역에 접근하려는 3개의 스레드가 있다. 고양이를 스레드로 비유하였다.


 3개의 스레드들이 동시에 임계영역에 접근하려고 한다. 하지만 이는 알고 있듯이 문제가 발생한다. 그래서 하나의 쓰레드만 임계영역에 접근할 수 있다. 하나의 쓰레드가 임계영역에 진입하면 다른 쓰레드들은 기다린다. 위 그림에서는 쓰레드들은 Block상태가 된다.



 먼저 들어간 스레드가 임계영역을 빠져나오면, Block상태의 스레드 중에 한  스레드가 임계영역에 진입할 수 있다. 진입하지 못한 스레드는 계속 Block상태가 된다.

<출저: http://mooneegee.blogspot.kr/, 윤성우의 시스템프로그래밍>


그림을 저렇게 보면서 이해하면 임계구역이란 어떤것인지 더 확실하게 감이 왔을거라고 생각한다. 나도 저 그림을 보면서 이해를 했다.

4. 코드에서의 임계구역

<사진출저: www.google.com>


대략적으로 그림은 위와 같다. EnterCriticalSection함수가 있고 LeaveCriticalSection이라는 함수가 있다. 이 두가지를 정확히 이해를 할 수 있어야 임계영역이 무엇인지에 대해 더 확실하게 감이 잡힐 수 있다. 한 쓰레드가 EnterCriticalSection() 함수를 실행하면 사용 중이라는 선언한다.여기서 EnterCriticalSection()함수가 어떤역할을 하는지 알 수 있을 것이다. 바로 '사용중'을 표시해서 스레드들이 동시에 들어가는 것을 막아주는 역할을 하게 된다. 그러면 다른 thread에 의해 EnterCriticalSection() 함수가 호출되면 이미 사용 중이기 때문에 이 스레드는 BLOCK 상태가 된다. 만약에 하나의 스레드가 완전히 다 실행이 되서 빠져나오면 다른 스레드들이 Block이 풀리면서 임계영역쪽으로 접근을 하게 된다. LeaveCriticalSection() 함수는 어떤 쓰레드가 임계영역을 빠져나올 때, 다른 쓰레드들이 임계구역을 사용할 수 있도록 해주기 위한 함수이다. 사용을 마치고 LeaveCriticalSection() 함수를 호출하면, EnterCriticalSection() 함수를 호출했다가 BLOCK 상태가 된 쓰레드가 있다면 그 쓰레드는 BLOCK 상태에서 빠져나와서 임계영역에 진입하게 된다. 이처럼 임계영역에는 한 구역에 한번에 하나의 스레드들이 접근한다는 것을 알아두면 좋을 것 같다.



대략 이런식으로 임계구역에 대해서 포스팅 해보았다. 처음엔 무슨 말인지 잘 몰랐지만 그림으로 이해하면 굉장히 쉬웠을 것이다. 임계구역에 대한 정보는 더 많을 수 있는데, 그것은 한번 더 공부하고 찾아보면서 해보아야 할 것 같다.




반응형
LIST

'운영체제 ' 카테고리의 다른 글

이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
Context Switching  (0) 2016.09.08
DeadLock 특징들  (0) 2016.08.19
가상메모리  (0) 2016.08.10
블로그 이미지

만년필석사

,

Context Switching

운영체제 2016. 9. 8. 21:56
반응형
SMALL

이번시간엔 Context Switching(문맥교환)에 대해 포스팅 해보려고 한다. synchronous blocking, non-blocking쪽을 공부하다가 나온 개념이었다. 그래서 이게 어떤것인지 정확하게 알지 못해서 Context Switching에 대해 공부를했다. 그 결과를 포스팅해보고자 한다.



Context Switching(문맥교환)은 우리나라 말로 해석하게 되면 문맥교환이란 의미가 된다. 컴퓨터에서도 마찬가지이다. 서로 정보를 교환한다. 하지만 이것이 어떻게 교환되는지 자세히알아보자. 


1. Context Switching은 어떤것인지?


 Ready 상태인 A 프로세스와 Running 상태인 B 프로세스가 있다고 가정하자. 이 프로세스는 인터럽트의 요청을 받게 된다고 또 가정을 하게 된다면 인터럽트에 의해서 서로 상태가 전이된다. 즉, A프로세스는 Running 상태가 되고 B프로세스는 Ready상태가 된다. 그럼 도데체 거기에 저장되어 있던 데이터는 어디로 갔을까? 만약 저장되어 있었던 기존의 데이터들이 저장되지 않고 그대로 교환되어버리면 데이터들이 날아가버리는 불쌍사가 발생한다. 그래서 A프로세스의 상태 또는 레지스터 값 등이 PCB에 저장되고, A 프로세스의 정보를 PCB에서 CPU로 적재시킨다. 그렇게 되면 또 B프로세스는 현재 저장된 A프로세스의 데이터들을 메모리 공간에 저장해두게 된다. 이것이 Context Switching이다. 서로 맞교환을 하지만 그 전에 저장되어있던 데이터들을 다 백업에 백업을 거쳐서 저장해놓기 때문에 Context Switching이 일어나도 그 전에 있던 데이터들은 항상 보존되게 된다.


2. 그럼 PCB는 무엇인지?


PCB는 Process Control Block의 약자로 프로세스나 레지스터의 값같은 데이터들을 저장할수 있는 공간이며, 프로세스마다 고유한 PCB의 값을 가지게 된다. 


3. Context Switching에 대한 모식도



출저: http://mooneegee.blogspot.kr, 윤성우의 시스템프로그래밍



이 그림이 가장 이해하기도 편해서 포스팅한다. Running상태인 A 프로세스와 Ready 상태인 B 프로세스가 Context Switching이 일어났다고 가정을 했을때 그림인데, A프로세스 데이터는 CPU에 적재되어 있고 B프로세스 데이터들은 메모리에 적재되어 있음을 보여주고 있는 상태이다.


4. 그럼 Context Switching의 단점은?


단점이 없는게 아니다. 제일 대표적인 단점이 CPU의 과부하다. 프로세스가 서로 변경되는 과정에서 데이터들을 서로 백업하고 백업하는 과정을 거치기때문에 당연히 그 과정에서 CPU가 큰 부담을 느낄 수 밖에 없다. 프로세스가 실행이 많이되면 많이 될수록 당연히 Context Switching의 과정은 많아질 수 밖에 없다. 그래서 운영체제 설계자들은 이러한것을 줄이기 위해 연구중이라고 한다. 




이렇게 Context Switching에 대해서 포스팅을 해봤는데 최대한 쉽게 풀어써보려고 노력했다. 내가 이해했던 내용을 썼지만 어려운 개념일 수도 있기 때문에 좀 더 많은 책들을 찾아보는 노력도 필요할 것 같다.

반응형
LIST

'운영체제 ' 카테고리의 다른 글

이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
임계구역(Critical section)  (0) 2016.09.11
DeadLock 특징들  (0) 2016.08.19
가상메모리  (0) 2016.08.10
블로그 이미지

만년필석사

,