OS2013. 1. 9. 16:09

프로세스 개념

초기의 컴퓨터 시스템은 한 번에 하나의 프로그램만을 수행하도록 허용하였다. 반면에 오늘날 우리가 사용하는 컴퓨터 시스템은 메모리에 다수의 프로그램들이 적재되어 병행 수행되는 것을 허용한다. 이런 발전으로인해 프로세스의 개념이 생기게 되었다. 이쯤에서 프로세스의 정의를 짚고 넘어가자.


프로세스 : 수행중인 프로그램


프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 프로세스는 현대의 시분할 시스템에서 작업의 단위이므로, 작업(task, job)이라는 용어와 거의 같은 의미로 쓰인다.


메모리 내의 프로세스

프로세스는 다음을 포함한다(즉, 메모리에 로드 될 수 있는 프로세스는 다음과 같은 구조를 가질 수 있다.)

- 프로그램 카운터 : 다음에 실행될 명령어의 주소를 가지고 있다.

- 현재 활동 : 프로세스 레지스터의 내용

- 스택 : 일반적으로 함수의 매개변수, 복귀 주소, 지역 변수와 같은 임시적인 자료

- 데이터 섹션 : 전역 변수들을 포함

- 힙 : 프로세스 실행중에 동적으로 할당되는 메모리




< 메모리 상의 프로세스 : 프로세스가 포함하는것 >

프로세스 상태

프로세스는 또한 실행되면서 그 상태가 변하기도 한다. 다음은 프로세스가 가질수 있는 상태의 목록이다.

- 신설(new) : 프로세스 생성

- 수행(running) : 명령어가 실행 중 이다.

- 대기(waiting) :  프로세스가 이벤트 발생을 기다리고 있다.

- 준비(ready) : 프로세스가 자신에게 프로세서(CPU)가 할당되기를 기다리고 있다.

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



< 프로세스 상태도 >


PCB(프로세스 제어 블록)

각 프로세스는 운영체제 내에서 프로세스 제어 블록에 의해서 표현된다.



< 프로세스 제어 블록(PCB) >


- 프로세스 상태

- 프로그램 카운터


- CPU 레지스터들 : CPU 레지스터는 컴퓨터의구조에 따라 다양한 개수와 유형을 가진다. 레지스터에는 누산기, 색인 레지스터, 스택 레지스터, 범용 레지스터, 상태 코드 정보가 포함된다. 프로그램 카운터와 함께 이 상태 정보는 나중에 프로세스가 계속 올바르게 수행되도록 하기 위해서, 인터럽트 발생 시 저장되어야 한다.


- CPU 스케줄링 정보

- 메모리 관리 정보

- 회계 정보 : 이 정보는 CPU가 사용된 양과 사용된 실시간, 시간 제한, 계정 번호, 프로세스 번호 등을 포함한다.

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


자 그럼 PCB가 왜 나왔는지, 왜 필요한지 생각해보자. 우리는 시분할 기법을 사용함으로서 멀티 태스킹을 할 수 있다. 즉, 우리가 음악을 들으면서 문서작업을 동시에 할 수 있는 것이 바로 멀티 태스킹이라고 생각하면 된다. 하지만 사용자가 보기에는 모든 작업이 동시에 이루어지는 것 같지만 실제로는 CPU가 밀리세컨드 단위로 작업을 돌아가면서 수행하기 때문에 우리가 그렇게 느끼는 것이다. 이처럼 CPU가 작업을 돌아가면서 할 때 음악 프로세스에서 문서 프로세스로의 내용 전환(context switch)이 일어난다. 내용 전환 시에 필요한 것이 바로 프로세스의 상태들이다. 즉 위에서 언급했던 음악 프로세스의 내용들을 문서 프로세스의 내용으로 바꿔야 CPU가 문서 작업을 할 수 있는 것이다. 만약 이런 상태들이 저장되지 않는다면 음악을 어디까지 들었는지 문서를 얼마나 작성했는지와 같은 정보들을 전혀 모르게 되는 것과 비슷하다고 생각하면 이해가 쉬울지도 모르겠다.




< CPU의 내용 전환(context switch) >


요약하자면 프로세스 제어 블록은 단순히 프로세스마다 변하는 모든 정보에 대한 저장소의 역할을 한다.


프로세스 스케줄링


다중 프로그래밍의 목적은 CPU의 사용률을 최대화 하는 것이다. 여러 개의 프로그램(프로세스)을 메모리에 올려 하나의 프로그램이 입출력 작업을 수행 중인 경우(CPU의 연산이 필요하지 않는경우를 뜻한다) CPU가 다른 프로세스를 수행함으로써 CPU가 항상 어떤 프로세스든지 실행중이게 한다는 방법이다. 이것이 가능하기 위해선 앞에서 말했던 시분할이 이루어져야 한다. 시분할은 내용 전환을 하면서 현재 수행할 프로세스를 바꾸는 것이라고 했는데, 내용 전환을 하기 위해 다음에 어떤 프로세스를 수행할 것인지를 설정하고 관리하는 것이 바로 프로세스 스케줄링(CPU 스케줄링)이라고 할 수 있을 것이다.


프로세스 스케줄링 : 다중 프로그래밍을 가능하게 하는 운영체제의 동작 기법. 운영체제는 프로세스들에게 CPU등의 자원 배정을 적절히 함으로써 시스템의 성능(사용률 등)을 개선할 수 있다.


스케줄링 큐

프로세스들은 여러 큐들을 이동하며 스케줄링 된다.


- 작업 큐 : 시스템 내에 있는 모든 프로세스 집합

- 준비 큐 : 주 메모리에 상주하면서 실행될 준비를 하고 있는 프로세스 집합

- 장치 큐 : 입출력 장치를 기다리고 있는 프로세스 집합



< 프로세스 스케줄링을 표현하는 큐잉 도표 >


위 그림처럼 프로세스들은 여러 큐들 이동하면서 스케줄러가 정한 순서에 맞춰서 작업을 수행한다. 그럼 이제 프로세스 스케줄링을 하는 스케줄러의 종류에 대해서 이야기 해보자.


스케줄러

- 장기 스케줄러 ( Long-term scheduler) : 디스크로부터 주 메모리 상의 준비 큐로 옮겨질 프로세스들을 선택한다.

- 단기 스케줄러 (Short-term scheduler) : 준비 큐에 있는 어떤 프로세스가 다음 차례에 수행될지 선택하여 CPU를 할당한다.


풀어서 말하면, 장기 스케줄러는 하드 -> 주 메모리 

단기 스케줄러는 주 메모리 -> CPU 이렇게 프로세스를 이동시킨다는 것이다.


우리가 말하는 다중 프로그래밍의 정도(몇 개의 혹은 어떤 프로세스가 주 메모리에 상주할 것인가)를 제어하는 것이라고 보면 된다. 하드에서 메인 메모리로 로드하는 것은 꽤 느린 편이다. 때문에 장기 스케줄러는 신중히 프로세스를 메인 메모리로 로드해야 한다. 그래서 장기 스케줄러는 입/출력을 많이하는 프로세스(입출력 결속 프로세스)와 CPU연산을 많이 필요로하는 프로세스(CPU결속 프로세스) 두 가지를 적절히 선택하여 메인 메모리로 로드하는 것이 중요하다.


- 중기 스케줄러 (medium-term scheduler) : 스와핑을 한다. ( 사용하지 않는 프로세스들을 제거하여 다중 프로그래밍 정도를 줄이고, 이 프로세스는 후에 다시 메모리로 올라와 수행을 계속할 수 있다. )


중기 스케줄러는 유닉스와 윈도우XP와 같은 시분할 시스템에서 주로 사용되며, 이 시스템에서 장기 스케줄러는 사용되지 않는다. 이 외에도 중기 스케줄러에 대한 많은 설명이 있지만 이 정도로 설명을 마친다.



< 큐잉 도표에 중기 스케줄링을 추가 >





'OS' 카테고리의 다른 글

3-1. 프로세스 : 프로세스의 연산  (1) 2013.01.16
2-3. 운영체제 구조  (0) 2013.01.03
2-1. 운영 체제 구조 : 운영체제 서비스, UI  (0) 2012.12.30
1. Introduction  (0) 2012.12.30
Posted by twinjh
OS2013. 1. 3. 23:59

운영체제 설계 및 구현


이번에는 운영체제를 설계하고 구현할 때 우리가 당면하는 문제점을 논의한다. 물론 이런 설계 시 문제점에 대한 완전한 해결책은 없지만 성공적인 접근 방법들이 있다. 시스템을 설계하는데 있어 가장 크다고 할 수 있는 문제점은 시스템의 목표와 명세를 정의하는 일이다. 이런 목표와 명세는  하드웨어와 시스템 유형으로 어떤 것을 선택하는지에 영향을 받는다. 일괄처리, 시분할, 단일 사용자, 다중 사용자, 분산, 실시간 등 여러 유형의 시스템이 있기 때문에 목표와 요구명세를 정의하는 것이 어렵다고 하는 것이다. 


한줄 요약=> 운영체제에 대한 요구 정의 문제를 해결하는 유일한 해법은 없다.


원래 이런 분야는 소프트웨어 공학에서 다루는 것이므로 지금은 이정도만 하고 넘어가도록 한다.

하지만 운영체제 설계 시에 한 가지 중요한 원칙이 있는데 바로 메커니즘으로부터 정책을 분리하는 것이다. 


메커니즘 : 어떤 일을 어떻게 할 것인가를 결정하는 것

정책 : 무엇을 알 것인가를 결정하는 것


메커니즘으로부터 정책을 분리하는 것이 왜 중요하냐면, 정책을 변경해야하는 경우에 정책 밑에 깔린 모든 메커니즘의 변경이 요구되기 때문이다. 예를 들어 타이머 구조는 CPU 보호를 보장하기 위한 메커니즘이지만, 특정 사용자를 위해 타이머를 얼마나 오랫동안 설정할지를 결정하는 것은 정책적 결정이다. 타이머를 설정한다고 CPU보호가 불가능하면 안 된다는 것이다.


운영체제 구조


현대의 운영체제와 같이 크고 복잡한 시스템은 변경을 쉽게 하도록 신중히 제작되어야 한다. 때문에 운영체제의 구조가 잘 설계 되어있어야 변경이 쉽고, 적절하게 동작한다. 이 절에서는, 운영체제의 구조 4가지를 살펴 볼 것이다.


1. 간단한 구조


잘 정의된 구조를 갖지 못한 상용 시스템이 많이 있다. 종종 그러한 운영체제는 처음에는 소형이면서 간단하고 제한된 시스템으로 시작되어서 그런 구조여도 문제가 없었지만, 점점 시스템이 커지면서 문제가 된 것이다. 그러한 예로 MS-DOS가 있다.



< MS-DOS 계층 구조 : 인터페이스와 기능 계층이 잘 분리되어 있지 않다.>


MS-DOS는 인터페이스와 기능 계층이 잘 분리되어 있지 않는데, 최소의 공간에 최대의 기능들을 제공하도록 작성되어 있어서, 모듈로 분할되지 않았다. 변경을 하고자 하는 경우 모듈이 아니기 때문에 전체적인 수정이 필요할 수도 있다. 때문에 변경이 용이하지가 않은 것이다.

ex) MS-DOS의 응용 프로그램은 디스플레이와 디스크에 직접 쓰기가 가능하다. 이런 자유는 바이러스와 같은 악의적인 프로그램으로부터 취약하게 만들었다. 따라서 사용자 프로그램이 문제가 생기면 시스템 전체가 고장 나게 된다.


MS-DOS와 같이 제한적인 구조의 또 다른 예는 UNIX 운영체제이다. 초기의 유닉스는 다음 그림과 같이 계층들로 이루어졌다고 볼 수 있다.(현재는 발전하면서 추가/확장된 것이다.)



< UNIX 시스템 구조 >


아래서 두 번째 층이 커널인데 층이라고 하기에는 너무 많은 기능이 들어있다. 계층들로 이루어져 있지만 간단하기 때문에 간단한 구조로 간주하는 듯하다.


2. 계층적 접근


운영체제 시스템은 여러 계층((layer, level)으로 구분된다.

- 최하위 계층(layer 0) : 하드웨어

- 최상위 계층(layer N) : 사용자 인터페이스

모듈화를 통해, 각 계층은 바로 아래 계층에서 제공하는 기능과 서비스만을 사용한다.

- 계층은 하위 계층에 대한 연산을 호출할 수 있다.



< 계층 구조의 운영체제 >

장점

- 구축과 디버깅의 단순함

- 설계와 구현이 단순하다

- 각 계층은 하위 계층에서 제공하는 연산만을 통해 구현된다

- 각 계층은 이 연산들이 어떻게 구현되는지 알 필요가 없다


단점

- 다양한 계층들이 대략적으로 정의된다

- 각 계층은 오직 하위 계층들에서 제공하는 기능만을 사용하기 때문에, 주의 깊은 계획이 요구된다 => 예로 예비 저장 장소를 위한 장치 드라이버는, 메모리 관리가 예비 저장 장소를 사용할 수 있는 능력을 필요로 하기 때문에 메모리 관리 루틴들보다 저수준에 있어야 한다.


3. 마이크로커널


커널을 가능한 한 경량화한다. 

- 많은 기능을 커널로부터 user space로 이동한다

- 커널과의 통신은 사용자 모듈 사이에서 메세지 전달을 통해 이루어진다


장점

- 마이크로 커널을 확장하기 쉽다

- 운영체제를 새로운 구조로 이식하기 쉽다

- 커널에서 수행되는 코드가 더 적으므로 더 안정적이고 더 안전하다

단점

- 커널 공간과 통신하기 위한 사용자 공간의 성능 오버헤드 발생


4. 모듈


대부분의 현대 운영체제는 커널 모듈을 구현한다

- 커널은 핵심 컴포넌트들로 이루어지며 부팅 시나 실행 시에 부가적인 서비스들을 동적으로 연결한다

- 객체 지향 접근을 샤용한다

- 각 핵심 컴포넌트는 나뉘어져 있다

- 각 컴포넌트는 정해진 인터페이스를 통해 다른 컴포넌트와 대화한다

- 각 컴포넌트는 커널내에서 필요에 따라 적재 가능하다

=>결론적으로, 계층 구조와 유사하나 더 유연하다.



< 솔라리스 모듈화 접근법 >


모듈화 커널 접근법은 계층구조 접근법과 유사하다

- 모듈화 커널 접근법은 서브시스템들이 서로 정해진 인터페이스를 통해 상호작용하도록 요구한다


하지만 계층적 커널은 하위 계층에 있는 서브시스템들이 상위 계층 연산의 호출을 허용하지 않는 엄격한 서브시스템의 순서를 가지고 있다. 반면 모듈화 커널 접근법에서는 이런 제약이 없어서 모듈들이 서로 자유롭게 호출할 수 있다.








Posted by twinjh
기타2013. 1. 3. 16:07

요즘 윈도우8 노트북 사시려고 알아보고 계신 분들을 위한 팁글입니다.


윈도우8 노트북 혹은 태블릿들이 몇 가지 있는데요. 그 중에 저는 요가 13 오랜지 색상 사게 되었습니다.


사용1주일째 문제점 혹은 불편한 점과 장점을 알려드리도록 하겠습니다.


장점


180도 회전 : 요가는 이걸로 시작해서 이걸로 끝나는 듯 합니다. 화면 회전 덕분에 누워서도 할 수 있을 정도입니다.



불편한점(단점)


1. 내부 고주파 소음

제꺼만 불량인지는 모르겠으나 첫 번째 불편한 점입니다.

주변에서 다른 소리가 들리는 경우에는 감지를 못하지만 집이나 독서실 같은 조용한 장소에서 고주파음이 들립니다. 그것도 꽤나..


2. 키보드 불량


울트라북 표준에 맞추다 보니 붉은 박스 표시 부분아래 공간이 비어있는 상황입니다.

때문에 다른 부분을 타이핑 하는 것 보다 소리가 크게 나고 키감도 좋지 않습니다.

또 키를 눌렀을 경우 주변이 같이 눌리는 모습을 볼 수 있습니다.



영상첨부 합니다.





처음에 불량인줄 알고 서비스 센터에 가서 따져 보았지만 제품자체가 이렇게 나온다고 하더군요. 다른 제품까지 확인해 보지는 않았지만 그들이 그렇다고 했으니 저는 그말 그대로 이 글에 씁니다. 고주파 소음은 그렇다고 치고 이건 큰 결점인것 같습니다. 서비스 센터 엔지니어분 께서는 서비스 차원에서 키보드 아래 보충제를 넣어서 해결해 주겠다고만 하였습니다. 역시나 as는 대기업에 뒤쳐지는 것 같습니다. 예전에 마이크로 소프트 아크 터치 마우스(약 5만원대) as보냈더니 새제품으로 보내주었던 것 과는 차원이다르네요..


마지막으로 생각보다 환기팬 돌아가는 소리도 큰 것 같습니다. 역시 조용한 곳에서만 해당되는 것입니다.







'기타' 카테고리의 다른 글

크롬 북마크 복원  (0) 2013.11.02
암호학의 역사  (0) 2013.01.10
Posted by twinjh