서버 구축시 중요한 점은 IP의 설정이다. 이 IP는 인터넷을 사용하는 데 있어 서버와 클라이언트에 반드시 배정되어야 한다. 서버 측면에서는 이 IP가 설정되어 있어야 정보를 요구하는 클라이언트의 접속을 허용하게 할 수 있고, 클라이언트 측면에서는 IP가 배정되어 있어야 서버에 정보를 요구할 수 있는 것이다. 도메인 네임은 이러한 IP를 사람이 쉽게 기억할 수 없기 때문에 단지 영문자로 표시하는 형태이기 때문에 해당 IP와 대응되는 것일 뿐이다. 즉 인터넷에 연결된 컴퓨터들은 도메인 네임은 없을 수 있으나, IP는 반드시 있어야 한다. 즉, 인터넷에 연결하고자 하는 모든 컴퓨터들은 IP가 반드시 배정되어 있어야 한다.


그러나 현재 인터넷에 연결하고자 하는 IP의 개수는 어느 정도 한정되어 있다. 특히 LAN을 통해 인터넷에 연결되는 컴퓨터를 제외하고 PPP를 통해 인터넷에 연결되는 컴퓨터에 IP를 배정하는 데 있어서 한 가지 유의해야 할 점이 있다.


IP를 배정하는 데 있어서 접속할 때마다 항상 동일한 IP가 설정되는 정적(static) IP와 접속할 때마다 다른 IP가 설정되는 동적(dynamic) IP가 있다.


ISP에 가입하여 인터넷을 사용하는 데 있어서, 가입자들이 동시에 인터넷을 사용하는 경우는 매우 드물다. 즉 동시에 인터넷을 사용하는 경우는 약 10%정도이다. 이 경우 모든 ISP 가입자들에게 정적 IP 를 할당해주게 되면, 사용하지도 않는 IP가 낭비되는 셈이다. 따라서 각 ISP는 PPP를 통해 인터넷에 접속하는 컴퓨터에 접속할 때마다 다른 IP를 즉, 현재 사용 가능한 IP를 수시로 변경하여 배정하게 된다. 이것이 바로 동적 IP이다. 이런 동적 IP들을 따로 모아두고 있는 것을 IP 풀(pool)이라고 한다. 이렇게 관리하게 되면 IP 개수를 낭비하지 않게 된다.


정리하면, PPP를 통해 인터넷에 접속하게 되면 ISP시스템에서는 IP 풀에 사용가능한 IP 를 접속하고자 하는 컴퓨터에 배정하는 과정을 통해 인터넷을 사용하게 된다. 이것이 바로 동적 IP를 배정하는 과정인 것이다.


따라서 PPP를 통해 서버를 구축하고자 할 경우에 IP가 수시로 변경되므로 인터넷에 접속시 할당되는 IP를 잘 파악하여 설정하여야 한다.





안녕하세요!

티스토리에 보금자리를 마련하시려는 여러분께 초대장을 배포해 드리려고 합니다.

나만의, 내 생각을, 내 기억을 담는 소중한 블로그를 만들고 싶다면 티스토리로 시작해보세요!

티스토리 블로그는 초대에 의해서만 가입이 가능합니다. 원하시는 분은 댓글에 E-mail 주소를 남겨주시면 초대장을 보내드립니다. 

남겨주실 때에는 꼭 비밀댓글로 남겨주세요!

초대장을 보내드리고 바로 개설하시지 않으신 분들은 초대장을 회수할 수도 있으니 바로 개설해주세요!

Yes
이런 분들께 드립니다!
1. 다른 블로그를 사용해보셨던 분
2. 이메일 주소가 정상적인 분
3. 블로그를 시작하려는 이유를 남겨주신 분!
No
이런 분들께 드리지 않아요!
1. 이메일 주소가 의심되는 분!
2. 이메일 주소를 남기지 않으신 분
3. 이유도 없이 달라고 하시는 분!
티스토리 이래서 좋아요!
1. 이미지, 동영상, 오디오, 파일까지! 무한 용량과 강력한 멀티미디어를 올릴 수 있어요!
2. 스킨위자드로 스킨을 내맘대로~ 거기에 기능 확장 플러그인까지!
3. 내가 원하는대로 myID.com으로 블로그 주소를 만들 수 있어요!


---------------------------------------------------------------------------

비밀댓글로

1. e-mail 주소

2. 블로그 포스팅할 분야

3. 블로그 계획 내용

을 적어주시면 되겠습니다. 감사합니다.

<프로세스 동기화 내용 목차>

1. Critical-Section Problem (임계 영역 문제)

2. Hardware Synchronization (하드웨어 동기화)

3. Semaphore (세마포어 - 소프트웨어 동기화)

4. Classic Problems of Synchronization (동기화의 고전문제들)

5. Monitors (모니터)



Q. 임계 영역이란 무엇인가? 임계 영역 문제란 무엇인가?

 임계 영역은 공유 데이터에 접근하는 코드이다. 공유 데이터에 동시 접근하게 되면 데이터의 무결성이 손상될 수 있다. 이러한 문제가 바로 임계 영역 문제이다. 임계 영역 문제은 생산자-소비자 문제라고도 한다. 생산자, 소비자 역할을 하는 프로세스 2개가 동시에 공유 자원에 접근함으로써 기대했던 값과는 다른 결과가 나오게 된다. (그리고 이러한 상황을 경쟁조건이라고도 한다.)



Q. 경쟁 조건이란 무엇인가?

 경쟁 조건(race condition)이란 임계영역의 부적절한 처리로 예상치 못한 결과를 발생시킬 수 있는 상황을 의미한다. 경쟁 조건 문제를 해소하려면 반드시 한 순간에 하나의 프로세스만 임계영역을 실행할 수 있도록 보장해야 한다.



Q. 임계 영역 문제의 해결책이 되기 위한 조건은 무엇이 있나? (특정 해결책(solution)이 임계 영역 문제를 해결한다고 말하려면 무슨 조건을 만족해야 하나?)

 임계 영역 문제의 해결책이 되려면 3가지 조건을 만족해야 한다. 상호 배제(Mutual Exclusion), 진행(Progress), 한정 대기(Bounded Waiting)이다.

1 .프로세스 Pi가 임계영역에 존재하는 경우, 다른 프로세스는 임계영역을 실행하지 못하도록 하면 상호 배제 조건을 만족한다고 할 수 있다. 

2. 임계 영역 안에서 실행하고 있는 프로세스가 없는 경우, 임계 영역을 실행하고자 하는 프로세스는 반드시 임계 영역을 실행할 수 있어야 한다. 이를 만족하면 진행 조건을 만족한다고 할 수 있다. 

3. 임계 영역을 요청한 프로세스는 무한히 대기하면 안된다. 즉, 제한된 대기 시간을 가져야 한다. 이를 만족하면 한정 대기 조건을 만족한다고 할 수 있다.

 3가지 조건을 모두 만족해야만 임계 영역 문제(critical section problem)을 해결할 수 있는 해결책(solution)이라고 할 수 있다.



Q. 임계 영역 문제 해결책에는 어떠한 것이 있는가?

 임계 영역 문제 해결책은 임계영역의 실행여부를 알 수 있는 메커니즘이 제공되는지가 관건이다. 임계 영역 문제 해결책으로는 크게 하드웨어적 해결책과 소프트웨어적 해결책이 있다. 하드웨어적 해결책으로는 TestAndSet, Swap 등이 있고, 소프트웨어적 해결책으로는 세마포어, 모니터, 조건 변수 등이 있다.



Q. TestAndSet의 작동방식을 설명하라.

boolean * TestAndSet (boolean * target) 

{

  boolean * rv = * target;

  *target = TRUE;

  return rv;

}


인자로 받은 값을 그대로 반환한다. 다만, 인자의 값자체를 TRUE로 변경한다.


while(true) 

{

  while(TestAndSet(&lock))

    ; // do nothing

  // critical section

  lock = FALSE;

  // remainder section

}


제일 처음에는 lock은 FALSE값으로 초기화되어 있다. 따라서, 처음으로 실행한 프로세스는 첫 while문을 통과한다. 그리고, TestAndSet에 의해서 lock은 TRUE가 되었으므로, 다른 프로세스가 임계 영역을 실행하려고 해도, while문에서 걸려서 실행할 수 없다. 상호 배제 조건을 만족하는 셈이다. 그리고 임계 영역을 다 끝낸 프로세스는 lock값을 다시 FALSE로 되돌려서 다른 프로세스도 임계영역을 실행할 수 있도록 한다. 따라서, 진행 조건도 만족하는 셈이다.

다만, 한정 대기 조건을 만족한다고 볼 수는 없다.



Q. Swap 의 작동방식을 설명하라.

void Swap (boolean *a, boolean *b)

{

  boolean temp = *a;

  *a = *b;

  *b = temp;

}


인자로 받은 a,b의 값을 서로 바꾼다.


while(true)

{

  key = TRUE;

  while ( key == TRUE)

    Swap(&lock, &key);

  // critical section

  lock = FALSE;

  // remainder section

}


제일 처음에는 lock값이 FALSE로 초기화되어있다. 따라서, lock과 key를 swap하면 key 값이 FALSE가 되어 바로 while문을 통과한다. 하지만, lock값이 TRUE가 되었으므로 다른 프로세스는 while문을 빠져나가지 못한다. 즉, 상호 배제 조건을 만족하는 셈이다. 그리고 임계 영역을 다 진행한 프로세스는 lock값을 FALSE로 되돌리므로 다른 프로세스도 임계 영역을 실행할 수 있또록 한다. 따라서, 진행 조건도 만족하는 셈이다.

다만, 한정 대기 조건을 만족한다고 볼 수는 없다.



Q. 한정 대기 조건을 만족하도록 TestAndSet 을 사용하여 임계영역을 구현하라.

우선, boolean waiting[n]; boolean lock;을 공유 변수(전역 변수)로 선언한다. waiting 배열을 이용하여 한정 대기 조건을 만족하도록 구현할 것이다.


do

{

  waiting[i] = TRUE;

  key = TRUE;

  while(key && waiting[i])

    key = TestAndSet(&lock);

  waiting[i] = FALSE;

  // critical section

  j = (i+1)%n;

  while((j!=i) && !waiting[j]) // scanning in 'waiting'

    j = (j+1)%n;

  if(j==i)             // if no process is waiting

    lock = FALSE; // lock release

  else                          // if a waiting process exists

    waiting[j] = FALSE; // the process can enter the critical section in next order.

} while (TRUE);


처음에 lock값은 FALSE로 초기화되어 있다. 처음으로 임계영역에 들어가는 프로세스에서는 TestAndSet에 의해서 key가 FALSE가 된다. 따라서 바로 while문을 통과하여 임계 영역을 진행한다. 이때, lock은 TestAndSet에 의해서 TRUE가 되었으므로 key값은 계속해서 TRUE이고, 다른 프로세스는 while문을 통과하지 못한다. 따라서, 상호 배제 조건을 만족한다고 할 수 있다. 


그 다음, 임계 영역을 모두 진행한 프로세스는 waiting 배열을 i+1, i+2, ... , n-1, 0, ... i-1 순서대로 조사한다. 조사한 순서에서 가장 처음으로 waiting값이 TRUE인 프로세스를 찾으면, 그 프로세스가 다음 차례로 임계 영역을 실행하는 프로세스가 된다. 그리고 만약 모두 조사했음에도 waiting값이 TRUE인 프로세스가 없다면 완전히 lock을 FALSE로 돌려버린다. (즉, lock을 놓아버린다.) 즉, 임계영역에 들어가기를 원하는 모든 프로세스들이 최대한 n-1 번 안에는 임계영역에 들어갈 수 있게 된다. 한정 대기 조건을 만족하게 되었다. 또한, 기다리는 프로세스가 없는 경우는 당연히 lock이 FALSE값이 되므로 바로 프로세스가 임계영역에 들어갈 수 있다. 진행 조건도 만족한다.

따라서, 위 구현은 3가지 조건을 모두 만족하므로 임계 영역을 완벽하게 해결한다.



Q. 세마포어란 무엇인가? 어떻게 구현하나?

 세마포어는 소프트웨어적 프로세스 동기화 기법 중 하나다. 세마포어 변수값에는 wait, signal 라고 하는 원자적 명령에 의해서만 접근이 가능하다. (원자적 명령이라는 말은 그 명령 혹은 함수가 진행하는 동안 다른 방해가 들어오지 않음을 의미한다.)


wait (S) {

  while S<=0

    ; // no-op

  S --;

}

signal (S) {

  S ++;

}


이러한 구현을 한 세마포어(무한루프로 wait을 구현한 세마포어)를 spin lock(스핀 락)이라고도 한다. 스핀 락은 불필요한 CPU 싸이클을 낭비하므로 좋지 못한 구현이다. (물론 스핀 락도 유일한 장점을 가진다. 바로, 컨텍스트 스위치가 전혀 없다는 것이다.) 따라서, 대기 큐를 이용한 세마포어 wait, signal 구현도 가능하다. 다만, 그러한 구현은 새로운 문제인 데드락을 발생시킨다.


wait (S) {

  S --;

  if ( S < 0 )

  {

    add this process to Waiting Queue;

    block;

  }

}

signal (S) {

  S ++;

  if( S >= 0 )

  {

    remove the process 'P' from Waiting Queue;

    wakeup (P);

  }

}



Q. 데드락, 교착 상태란 무엇인가?

 교착 상태를 쉽게 표현하면 '모든 것이 모든 것을 막는다'라는 상황이다. 세마포어를 waiting queue 를 이용해서 구현하면 2개 이상의 프로세스가 영원히 기다리는 상황이 발생할 수도 있다. wait 함수를 호출해 기다리는 상태에서 그에 상응하는 signal 액션이 영원히 발생하지 않는 상황이 되면, 그러한 상황에 있는 프로세스을 교착상태에 빠졌다고 말한다. 예를 들어 다음과 같은 프로세스가 2개 있으면 P0, P1 이 교착상태에 빠지게 된다. 세마포어 Q,S가 있다고 하고, 이들은 초기값을 1로 한다.


P0                  P1

wait(S);           wait(Q);

wait(Q);          wait(S);

...                   ...

signal(S);        signal(Q);

signal(Q);       signal(S);


만약, P0, P1 이 동시에 첫 줄을 실행하면 S와 Q 모두 세마포어 변수값이 0이 된다. 그 후 두번째 줄을 실행하면, S와 Q 모두 값이 0이므로 block이 된다. P0의 wait(Q)를 깨우려면 P1의 signal(Q);가 작동해야 하는데, wait(S)로 막혀 있으므로 절대 도달하지 않는다. 또한, P1의 wait(S)를 깨우려면 P0의 signal(S)가 작동해야 하는데, wait(Q)로 막혀 있으므로 절대 도달하지 않는다. 이러한 상황에 있을 때, P0, P1은 교착상태에 빠졌다고 말한다.



Q. 한정된 버퍼 문제란 무엇인가? (Bounded-Buffer Problem)



Q. 저자-독자 문제란 무엇인가? (Readers-Writers Problem)



Q. 식사하는 철학자 문제란 무엇인가? (Dining-Philosophers Problem)



Q. 모니터가 보장하지 못하는 경우에는 무엇이 있나?

총 4가지 경우가 있다. 

1. 자원에 대한 접근 권한을 얻지 않았음에도 자원에 대해 접근을 할 수도 있다. 

2. 자원에 접근하는 것에 대한 승인을 받은 후에 절대로 자원을 놓지 않을 수도 있다.

3. 요청하지 않은 자원을 놓을 수도 있다. 

4. 똑같은 자원을 두 번 요청할 수도 있다. (자원을 놓는 일을 하지 않고서도)


'컴퓨터 프로그래밍' 카테고리의 다른 글

웹 호스팅(Web Hosting)  (0) 2014.06.06
정적 IP와 동적 IP  (0) 2014.06.06
[파일처리] 저장장치와 파일구조  (0) 2014.04.19
[운영체제] CPU 스케줄러  (2) 2014.04.17
[운영체제] 쓰레드  (0) 2014.04.17

computer science Archives - Global Processing Services | GPS


내용 요약>

- 파일 관리기

 

- 물리 저장 매체의 분류

- 저장 장치 계층

- 자기 디스크 - (자기) 디스크의 성능, 성능 개선 방법: RAID

- 광 디스크

- 자기 테이프

 

- 저장 장치 액세스

- 버퍼 매니저 - 버퍼 대치전략

 

- 파일 구성

- 고정 길이 레코드 - 자유 리스트

- 가변 길이 레코드 - 바이트 스트링 표현법, 슬롯 페이지 구조, 공간예약, 포인터 방법

 

 

 

질문>

Q. 파일 관리기란 무엇인가? (File Manager)

 파일 관련 처리 과정 중에 레코드가 필요하면, 레코드는 디스크로부터 주기억 장치로 반입(Fetch) 된다. 파일 관리기는 레코드가 있는 페이지를 결정하는 역할을 한다. 원하는 레코드를 포함하는 페이지를 빨리 찾아내기 위해 보조적인 자료 구조를 사용할 수 있다. 파일 관리기가 원하는 페이지를 알아내면 버퍼 관리기에게 해당 페이지를 요청하는 방식으로 동작하며, 버퍼 관리기는 요청 페이지를 디스크에서 가져와 버퍼에 적재하고, 파일 관리기에 알린다.

 

Q. 저장 장치에서 블록이란?

 파일은 블록이라는 고정 길이 저장 단위로 분할되어 있다. 블록은 저장 장치 할당과 데이터 전송 단위의 역할을 한다. 데이터베이스는 기본적으로 블록의 크기로 4~8KB만큼을 가진다. 한 블록은 여러 레코드를 포함한다. 시스템은 디스크와 메모리 간의 데이터(파일) 전송에서 최소한의 블록 개수가 전송이 되도록 해야 한다. 가급적 많은 블록을 주 기억 장치, 즉 메인 메모리에 있도록 해야 디스크 액세스 수를 줄일 수 있다.

 

Q. 저장 장치에서 버퍼란?

 디스크 블록의 사본을 저장하는 데 사용되는 메인 메모리 부분이다. 버퍼 매니저는 메인 메모리에 버퍼 공간을 할당하는 서브 시스템으로 작동한다.

 

Q. 버퍼 매니저는 무엇이고, 버퍼 매니저의 동작 원리는 어떠한가? (Buffer Manager)

 프로그램은 디스크에서 블록이 필요할 때 버퍼 매니저를 호출한다. 필요한 블록이 버퍼(버퍼는 메인 메모리의 부분임)내에 이미 존재하면 메인 메모리 내의 블록 주소값을 요청하는 프로그램에게 전달한다. 블록이 버퍼 내에 없으면, 버퍼 매니저는 필요에 따라 새로운 블록을 위한 공간을 마련하기 위해 일부 블록을 내보내에 버퍼내어 공간을 확보하고 할당한다. 내보내진 블록은 디스크에 수록되고 읽혀진 최근 시점 이후 갱신되었을 때만 디스크에 다시 쓰이게 된다. 버퍼에 공간이 할당되면, 버퍼 매니저는 디스크에서 버퍼로 블록을 읽어 들이고 메인 메모리내 블록의 주소를 요청자(요청 프로그램)에게 전달한다.

 

Q. 버퍼 대치 전략에는 무엇이 있는가?

 LRU 버퍼 대치 전략과 MRU 버퍼 대치 전략이 있다.

 

Q. LRU 버퍼 대치 전략은 무엇인가?

 대부분 운영체제는 최근에 사용되지 않은 블록(LRU 블록)을 대치한다. LRU 대치 전략은 미래의 참조 지표로서 과거의 블록 참조 패턴을 사용한다는 특징을 가지고 있다. 질의는 잘 정의된 액세스 패턴(순차 스캔과 같은)을 가지며, 데이터베이스 시스템은 미래의 참조를 예측하는 데 사용자 질의 내의 정보를 사용할 수 있다. LRU는 데이터의 반복 스캔을 포함한 어떤 액세스 패턴에 대해서는 나쁜 전략일 수 있다.

 

Q. MRU 버퍼 대치 전략은 무엇인가?

 MRU 버퍼 대치 전략은 시스템이 현재 처리중인 블록을 고정시키고, 블록의 마지막 레코드가 처리된 후 블록을 해제하는 대치 전략이다. 해제되는 블록은 가장 최근에 사용한 블록이 되며, 그 블록이 점유했던 공간이 해제된다.

 

Q. 파일이란 무엇인가?

 파일은 데이터베이스의 구성 단위이다. 즉, 데이터베이스는 파일의 모임이다. 각 파일은 레코드로 구성되며, 레코드는 필드로 구성된다. 각 레코드가 단일 블록 내에 완전하게 포함되도록 하는 것이 좋다. 하나의 레코드가 여러 블록에 걸쳐 저장되는 것을 제한함으로써 데이터 항목에 대한 접근을 단순화시키고 속도를 향상시킬 수 있다. 파일을 구성하는 가장 단순한 방법은 레코드의 크기를 고정길이로 지정하는 것이다.

 

 

'컴퓨터 프로그래밍' 카테고리의 다른 글

정적 IP와 동적 IP  (0) 2014.06.06
[운영체제] 프로세스 동기화  (0) 2014.04.22
[운영체제] CPU 스케줄러  (2) 2014.04.17
[운영체제] 쓰레드  (0) 2014.04.17
[Pintos Project 2] System call handler  (0) 2014.04.15

Q. 스케줄러는 무엇이며, 스케줄링을 하는데 있어서 중요한 것은 무엇인가?

스케줄러는 레디 큐에 존재하는 프로세스들을 특정한 우선순위를 기반으로 CPU를 할당받게 해주는 역할을 한다. 스케줄러가 스케줄링을 하는데에는 2가지 중요한 요소가 있다. 첫 번째, 스케줄링의 최대 관심사는 무엇인가, 즉, 스케줄링의 기준은 무엇인가? 이다. 스케줄링의 기준이 될 수 있는 대표적인 예로는 대기 시간(waiting time), CPU 할당 시간(allocation time) 등이 있다. 두 번째, 스케줄링을 어떻게 구현할 것인가? 이다. 스케줄링을 구현할 때는 반드시 자료구조의 구현이 따른다. 어떠한 자료구조를 이용하여 스케줄링을 구현할 것인지를 결정하는 것이 스케줄링에 중요한 요소이다. 대표적으로, 링크드 리스트, 해쉬 리스트, 비트 맵, 레드 블랙 트리(리눅스) 등 다양한 자료구조를 사용하지만, 정밀하고 견고한 운영체제일 수록 스케줄링에 사용하는 자료구조의 실행시간을 최대한 줄여나가는 것이 중요하다. 최소한 O(log n) 수준으로 실행 시간을 낮춰야 한다.



Q. 스케줄링의 목표는 무엇인가?

스케줄링의 목표에는 3가지가 있다. CPU 활용을 최대화하자, 평균 대기 시간을 최소화하자. 처리량을 최대화하자. 스케줄링은 멀티 프로세싱 운영 체제를 디자인하는 일과 컴퓨터의 멀티태스킹 작업을 만들어내는 데에 있어서 핵심 개념이다.



Q.  스케줄링 알고리즘에는 무엇이 있나?

FCFS(First Come, First Served), SJF(Shortest Job First), Priority Scheduling, RR(Round Robin) Scheduling 등이 있다.



Q. FCFS(FIrst Come, First Served) 스케줄링은 무엇인가? 그리고 어떤 특징을 가지고 있고, 어떤 장단점을 가지고 있나?

  FCFS는 First Come, First Served 의 약자이다. 즉, 먼저 온 사람 먼저 대접한다는 뜻으로, CPU를 처음 요구한 프로세스가 CPU를 처음 사용한다는 의미의 스케줄링 알고리즘이다. 구현할 때는 FIFO (First In FIrst Out) 큐 자료구조를 사용한다. FCFS는 스케줄링 특성상 비선점 스케줄링 알고리즘이며, CPU를 사용하고 있는 프로세스 자기 자신이 CPU를 놓아줄 때까지 CPU를 다른 프로세스에게 양보하지 않는다. 이러한 특성은 콘보이 효과를 불러 일으킨다. 콘보이 효과란, CPU를 매우 오래 사용하는 프로세스가 도착하게 되면, 다른 프로세스가 CPU를 사용하는데 기다리는 대기 시간이 매우 커지는 현상을 말한다. 콘보이 효과는 비선점 스케줄링을 사용할 때만 발생한다. FCFS 스케줄링은 콘보이 효과때문에 평균 대기시간이 매우 형편없는 스케줄링 알고리즘이다. FCFS는 비선점 스케줄링 알고리즘의 장점을 그대로 가진다. 비선점 스케줄링 알고리즘은 모든 프로세스가 공평한 조건으로 CPU를 사용할 수 있게 해주며, 반응 시간을 예측할 수 있다.



Q. SJF 알고리즘은 무엇인가? 그리고 어떤 특징을 가지고 있고, 어떤 장단점을 가지고 있나?

  SJF는 Shortest Job First 의 약자이다. 가장 시간이 적게 걸리는 작업을 먼저한다는 뜻으로, SJF의 정의는 CPU가 릴리즈되어 있을 때, 가장 시간이 적게 걸리는 프로세스가 선택되어 실행된다는 것이다. SJF는 비선점 스케줄링과 선점 스케줄링 두가지 종류가 있고, 선점형 SJF는 SRTF(Shortest Remaining Time First)라고도 한다. SJF는 스케줄링 알고리즘 중에서 최소의 평균 대기 시간을 위해 최적화된 스케줄링 알고리즘이다. (즉, 스케줄링 알고리즘 중에서 평균 대기 시간을 가장 적게 가지는 스케줄링 알고리즘이다.) 

 SJF의 단점도 있다. SJF에서 최소의 오버헤드로 최적의 성능을 보장하도록 알고리즘을 구현하는 것이 힘들다는 것이 SJF의 단점이다. 선점형 SJF에서는 프로세스들끼리 서로 끼어들기 때문에, 다음 CPU 점유 시간을 예측하는 것이 매우 힘들다. (SJF는 CPU 점유 시간 자체를 예측해야만 구현할 수 있는 스케줄링 알고리즘이다. 즉, 미래를 예측해야 한다는 특성 자체가 SJF 알고리즘을 구현하는 것을 어렵게 만드는 것이다.) 이러한 특성은 제대로 성능을 발휘하는 선점형 SJF를 구현하는 것이 힘들게 한다. 



Q. Priority Scheduling 은 무엇인가? 어떤 특징을 가지고 있고, 어떤 장단점을 가지고 있나?

  높은 우선순위를 가진 프로세스가 항상 먼저 CPU를 사용할 수 있도록 구현한다. 우선순위 기반 스케줄링에는 치명적인 단점 이슈가 있다. 바로 Starvation(굶주림)이다. 우선순위가 낮은 프로세스는 영원히 작동하지 않을 수 있다. (우선순위가 낮은 프로세스의 대기 시간이 무한정 늘어날 수 있다.) Starvation의 해결책은 바로 Aging-method이다.   레디 큐에서 오랜 시간을 기다린 프로세스는 계속해서 우선순위를 높히게 하는 기법이다. 이러한 에이징 메서드 기법을 통해서 우선순위가 낮은 프로세스도 최대 한도의 대기 시간을 가질 수 있다. 참고로, 우선순위 스케줄링은 선점형 SJF와 비슷한 경향을 가지고 있다. 우선순위 스케줄링에서의 각 프로세스의 우선순위가 선점형 SJF 스케줄링에서의 예측 CPU 점유 시간과 동일한 역할을 한다. 우선순위가 높을 수록, 먼저 CPU를 사용할 수 있게 해주듯이, 예측 CPU 점유 시간이 짧을 수록 먼저 CPU를 사용할 수 있게 해준다는  것이 매우 흡사하다.



Q. Round Robin(RR) 스케줄링은 무엇인가? 어떤 특징과 장단점을 가지는가?

  Round Robin 스케줄링은 각각의 프로세스가 공평하게 시간 간격 동안 CPU를 활용할 수 있도록 하는 스케줄링 알고리즘이다. 정해진 시간 간격이 끝나면, CPU를 사용하고 있던 프로세스는 선점적으로 추방당한다. (레디 큐에 다시 들어가게 된다.) 여기서 정해진 시간 간격을 Time Quantum 이라고 한다. 

만약 레디 큐에 n개의 프로세스와 q의 time qunatum을 가지고 있다고 가정하면, 모든 프로세스는 최대한 (n-1)q 시간 안에 CPU 사용을 시작하게 됨을 보장할 수 있다. 따라서, 라운드 로빈은 SJF 스케줄링 보다 반응 시간 최적화에 있어서는 더 탁월한 스케줄링 알고리즘이다. (하지만 대기 시간의 최적화는 SJF가 더 좋은 편이다.)

쓰레드

 독립적으로 실행되는 코드들의 집합



여러 개의 실이 엮여서 하나의 천을 이루는 것과 같이 여러 개의 독립적으로 수행되는 단위들이 결합하여 하나의 작업을 이루는 것에서 연유. (The name 'thread' is by analogy with the way that a number of threads are interwoven to make a piece of fabric....)


* 쓰레드는 CPU utilization의 기본 단위이며, Light Weight Process(경량 프로세스)라고 부르기도 한다. 

* 쓰레드와 프로세스의 가장 큰 차이는 바로 자신의 주소공간을 가지지 않는다는 것이다. 프로세스는 자신의 프로그램 카운터, 레지스터 값들, 그리고 주소 공간을 가진다. 

* 하지만 쓰레드는 자신의 프로그램 카운터, 레지스터 값만을 가지고 자신의 주소공간은 가지지 않는다. 자신의 주소 공간을 가지지 않는 대신, 다른 쓰레드와 주소 공간을 공유한다.




+ Recent posts