프로세스 스케줄링(Process Scheduling)

Posted by 나에요임마
2017. 7. 5. 02:11 Program/C#

프로세스 스케줄링

(Process Scheduling)




이번 '프로세스 스케줄링(Process Scheduling)'편에서는 스케줄링(Scheduling)이 무엇인지, 그리고 프로세스의 상태 전이에 대해서 간단히 알아보도록 하겠습니다.


스케줄링(Scheduling)

컴퓨터 내의 가장 핵심적인 역할을 담당하는 중앙 처리 장치인 CPU는 사람의 기관에 비유하자면 '뇌'라고 말할 수 있습니다. 사람이 두가지의 생각을 동시에 하지 못하듯, CPU도 마찬가지로 동시에 두개의 프로세스를 관리하지 못합니다. 그렇지만, 우리가 보고 있는 이 모니터 화면 안에서는 여러개의 프로그램이 함께 동작하여 작업을 할 수 있게끔 보여지는데 이는 우리가 배우게 될 '스케줄링(Scheduling)'이란 동작 기법을 통해 이와 같은 다중 프로그래밍을 가능하게 하는 것입니다. 스케줄링은 CPU 이용률을 극대화, 즉 시스템의 자원을 효율적으로 사용하기 위해 어느 프로세스가 CPU를 차지할 것인가에 대한 순서 또는 방법을 결정짓는 작업을 말합니다.


프로세스 스케줄링 기법은 다시 어떤 프로세스가 CPU를 점유할 때 CPU를 빼앗을수 있느냐, 없느냐에 따라 선점 스케줄링과 비선점 스케줄링으로 나뉘게 됩니다. 여기서 선점 스케줄링은 실행 중인 A와 B라는 프로세스가 있다고 가정을 하게 된다면, A라는 프로세스가 CPU를 점유하고 있는데 B라는 프로세스가 A를 CPU에게서 강제로 떨어트리고 B가 점유를 할 수 있는 방법입니다. 그리고 비선점 스케줄링은 A라는 프로세스가 CPU를 점유하고 있다면, B 프로세스가 CPU를 점유하려고 할때 A의 CPU 점유가 끝날때까지 기다려야 하는 방법입니다.


프로세스 상태 전이

어느 시점에서 실행되고 있는 프로세스는 단 한개이며, 여러 개의 프로세스를 번갈아 가며 실행한다는 것을 기억해 두셔야 합니다. 프로세스의 상태 전이는 아래와 같이 New(생성), Ready(준비), Running(실행), Blocked(대기), Terminated(종료)로 나뉘게 됩니다.

  생성(New): 제일 첫번째로 New에서 Ready로 전이되는 과정입니다. 프로세스가 생성되고 나서 생성된 프로세스는 준비(Ready) 상태에 머뭅니다. 준비 상태는 CPU를 점유하고 있는 상태가 아니라, CPU를 점유하길 희망하는 상태입니다. 준비 상태에서 실행 상태로 넘어가려면 작업 스케줄러가 선택해 주어야만 합니다.


  디스패치(Dispatch): 디스패치란 준비 상태에서 실행 상태로 전이되는 과정을 말하며, 이는 작업 스케줄러가 해당 프로세스를 선택하여 실행되어지는 것으로, 이때 실행된 프로세스가 CPU를 점유하게 됩니다.


  인터럽트(Interrupt): 인터럽트 신호를 받게되면, 실행중이던 프로세스는 준비 상태로 전이되고, 우선순위(Priority)가 높은 프로세스를 실행 상태로 전이시킵니다. (프로세스는 각각 우선순위를 부여받고, 우선순위에 따라 프로세스가 준비 상태로 전이되거나, 실행 상태로 전이됩니다.)


  입출력 혹은 이벤트 대기(I/O or event wait): CPU를 점유하고 있는 프로세스가 입출력 처리를 해야만 하는 상황이라면, 실행되고 있는 프로세스는 실행 상태에서 대기/보류 상태로 바뀝니다. 그리고 대기 상태로 바뀐 프로세스는 입출력 처리가 모두 끝날때까지 대기 상태로 머뭅니다. 그리고 실행 상태이던 프로세스가 대기 상태로 전이됨과 함께, 준비 상태이던 또다른 프로세스가 실행 상태로 전이됩니다. 또한 대기 상태인 프로세스는 우선순위가 부여되지 않으며 스케줄러에 의해 선택될 수 없습니다.


  입출력 혹은 이벤트 완료(I/O or event completion): 입출력 처리가 끝난 프로세스는 대기 상태에서 준비 상태로 전이되어 스케줄러에게 선택될 수 있게 됩니다. 추가로 프로세스를 종료(Terminate)시킬 때에도 Blocked 상태를 거칠 수 있다는 사실을 기억해 두시길 바랍니다.



출처: http://blog.eairship.kr/256 [누구나가 다 이해할 수 있는 프로그래밍 첫걸음]

'Program > C#' 카테고리의 다른 글

추상화클래스와 인터페이스의 용도, 차이점, 공통점  (0) 2017.09.19
DateTime & TimeSpan  (0) 2017.09.19
쓰레드 - Thread 클래스  (0) 2017.09.19
STAThread  (0) 2017.08.23
함수와 return  (0) 2017.06.29

함수와 return

Posted by 나에요임마
2017. 6. 29. 01:37 Program/C#

프로그래밍을 제일 처음하시는분들 그리고 저또한 프로그래밍을 처음할때 여러가지 우여곡절이

많았습니다. 함수가 없는 프로그래이밍 언어는 거의 없습니다. 함수는 프로그래밍을 이루는 아주 중요한 요소입니다. 함수용어 및 함수의 기능에 대해 완벽하지 않다면, 프로그래밍을 할 수가 없습니다.

절대로....

프로그래밍 기초부분이니까 다시 한번 보시겠습니다

그중에 함수의 return에 대해서만 오늘은 알아 보고, 다형성으로 넘어가지요

 

 

@. 리턴(return)의 정의

   - "돌아가겠다" 라고 해석하시는분들도 계시고, "끝내겠따", "반환하겠다"라고 해석하시는

      분들이 있는데 맞는말입니다.

   - 정의를 하기 위해서는 기능을 알아보겠습니다.

 

 1. 리턴의 의미

     - 보이는그대로 return 이라는 글자만 있습니다. 종료의 의미만을 나타냅니다.

       무엇을 종료하는냐?

     - 함수를 종료할때 쓰입니다.

     - 예를 들어보죠

 

class A

{

     public int plus(int a, int b)

     {

             int c = a + b;

             return c;

      }

}       

class program

{

      static void Main()

      {

            A a = new A();

            int result = a.plus(3, 4);

            Console.WriteLine(result);

       }

}

 A클래스안에 plus라는 함수(메서드)가 있습니다. 함수라고 통칭하지요

 

public int plus(int a, int b)

1.함수이름 : plus

2.함수매개변수값 : int a, int b(2개)

3.함수의 리턴값 : int        (함수이름앞에 int를 붙인거)

 

1,2,3번을 잘 보십시오, 함수자체로의 이러한 속성을 딱 봤을때 바로 보여야 합니다. 쉽지요?

물어보죠...함수의 이름이 뭔데요?? plus....

그렇다면...함수의 반환값은 뭔데요?? int형

오..그럼....함수의 매개변수는 뭔가요 int형 변수 a, int형 변수 b 이렇게 2개입니다.

 

자 정확히 답변이 되야합니다.

그렇다면 다시

 

public void Minus(string s) {......}

이 함수에 대해서 설명해보세요.

 

1. 함수이름 : Minus

2. 함수의 반환값 : void(없음) ;

   // void는 return할 값이 없기때문에 {} 몸체부분에 return을 안적어주셔됩니다.

3. 함수의 매개변수값 : string s (문자열 s)

 

다시 아래 소스를 보겠습니다.

class A

{

     public int plus(int a, int b)

     {

             int c = a + b;

             return c;

      }

}       

class program

{

      static void Main()

      {

            A a = new A();

            int result = a.plus(3, 4);

            Console.WriteLine(result);

       }

}

 

지금 A클래스내의 plus라는 함수의 선언부분(public int plus(int a, int b))만 보다 각이 나와야합니다.

아...이함수는 plus라는 이름이니깐 대략 더하겠다는 기능의 개발자의 의미가 있구나.

아...이함수는 void가 아니니깐 일단은 return값이 존재하며 return값은 int형이구나.

아...이함수는 매개변수 2개구나, 매개변수가 두개다 int형이고, 이름은 a, b이구나 라고 아셔야합니다.

그리고 {.............}이것을 우리는 함수 몸체라고 합니다.

자 이제 몸체를 보겠습니다. 내용을 보겠다는것이지요

 

int c = a +  b; 입니다.

매개변수로 즉, a, b를 이용해서 main 함수에서 던져진 값이 이 변수에 할당됩니다.

3, 4가 할당되었으므로,

a = 3

b = 4

가 할당됩니다.

그리고 int c 변수가 만들어짐과 동시에 a+b의 연산결과인 7이 할당되어

c변수에는 7이 저장이 되는것이지요;

 

그렇다면 여기서 return c; 라는것이 중요한데 이것을 보죠

return은 끝내겠다는 함수를 종료하겠다는 동시에 c값을 main함수에서 호출한 곳으로 던져주겠다는 뜻입니다.

 

메인함수안을 보죠

int result = a.plus(3, 4);

이부분에서 a.plus(3,4);가 함수를 호출한 부분이고, 호출(부르는것)을 하게 되면 아까 위에서 본 연산의 결과가

리턴이 되어서 a.plus(3,4)는 7이라는 값이 되는셈이지요.

그리고 7이라는 값이 result;에 대입이 되어

result는 7이 대입되는것입니다.

 

여기서 return 이라는 것은 역시나 함수를 종료하겠다는것이고, 이와 동시에 return 뒤에

적어준 변수나 값을 호출을 한곳으로 던져준다는것이지요. 이것이 함수의 기능입니다.

 

 

자 그럼 void라고 적힌 함수는 어떤의미일까요.

void는 그냥 아무것도 없다는 뜻입니다.

public void print();라는 함수가 있으면 print라는 함수는 아무런값도 리턴할것이 없다는 뜻입니다.

고로 호출한 메인함수에서는 그냥 호출만 할뿐이지 받을 값이 없기때문에, 주로 출력을 할때 자주 쓰입니다.

 

public void Print(int a, int b)

{

       Console.WriteLine(a+b);

       //return ; 이런식으로 끝내겠다는 의미만을 위해서 return만 적어주셔도 괜찬습니다.

       //값은 넣을수 없습니다.

}

 

단지 호출만 되면 void이기 때문에 return [값]식으로 적어주면 error가 납니다.

class A

{

  public string Print(string s)

  {

       s = s + " hello";

       return s;

  }

}

class program

{

   static void Main()

   {

          A a = new A();

          string result = a.Print("hi~ ");

          Console.WriteLIne(result);

    }

}

 

위의 소소로 복습을 합니다.

위의 Print함수는 return할값이 있는데 그 형식은 string입니다.

매개변수는 string s; 문자열 하나만 받을수 있지요

return값은 당연히 string으로 만들어졌으니 string 형 변수가 되야하지요

몸체설명은 어떤 특정한 문자열이 오면 거기에다가 hello라는 글자를 더해서 그 글자를

리턴하는것입니다.

 

메인함수에서 함수를 hi라는 값을 준후에 Print함수를 호출합니다.

그럼 Print함수는 값을 처리해서 hi~hello 라는 글자를 리턴해주고 그값역시 string이기 때문에

string result 를 선언해서 값을 대입해줘야 합니다.

그리고 값을 출력을 하는것이지요.

 

예가 적절했는지 설명이 적절했는지 잘모르겠지만,

의외로 모르는 사람들이 많아서 다시 한번 정리했습니다. 솔직히 놀랬습니다.

이것을 모르고 계속 수업 듣고 계신줄은......꼭 이것을 알고 넘어가시길

바랍니다. 왜냐면 return과 함수는 밥먹듯이 쓰이기 때문입니다.

 

정말 중요합니다.


'Program > C#' 카테고리의 다른 글

추상화클래스와 인터페이스의 용도, 차이점, 공통점  (0) 2017.09.19
DateTime & TimeSpan  (0) 2017.09.19
쓰레드 - Thread 클래스  (0) 2017.09.19
STAThread  (0) 2017.08.23
프로세스 스케줄링(Process Scheduling)  (0) 2017.07.05

생각의 힘

Posted by 나에요임마
2017. 6. 25. 13:01 카테고리 없음