[운영체제] 3. 프로세스 관리 (1)

jyleever·2023년 2월 18일
0

운영체제

목록 보기
5/9
post-thumbnail

http://www.kocw.net/home/cview.do?lid=718183c4e4e4861d

프로그램의 실행(메모리 load)

프로그램 : 파일시스템의 실행 파일
프로세스 : 프로그램이 실행되어 메모리에 올라간 상태

사실은 중간에 한 단계를 더 거치고 있다 virtual memory
각각의 프로그램은 자신의 memory 주소가 0번지부터 존재하고 있는데,

  • 당장 필요한 부분은 물리적인 메모리에 올라가고
  • 메모리에 올라가있지 않은 부분은 Swap area에 올라감

virtual memory 주소와 physical memory 주소가 존재하는데, 이 과정에서는 주소 변환 (Address Translation)이 필요함

커널 주소 공간, 프로그램의 virtual memory 공간은 코드, 데이터, 스택으로 구성되어있다.

코드 : 실행 파일에 있던 코드가 올라오는 부분으로서 실제 CPU가 실행될 기계어가 위치
데이터 : 프로그램이 실행되다가 메모리 데이터를 사용할 때(변수 사용 등)가 있는데, 이 때 데이터 영역에 위치한다. 모든 데이터가 위치하는 것은 아니고 전역 변수나 프로그램이 실행되면서 종료될 때까지 남아있는 것은 데이터에 위치
스택 : 함수 호출과 리턴에 관련. 함수 호출 시 스택에 쌓아놨다가, 리턴 되면 내용을 읽는 공간. 함수 안에 존재하는 지역 변수

커널도 하나의 프로그램이기 때문에 함수 구조로 구성되어있다.
이 프로그램이 실행될 때 커널의 주소 공간도 코드-데이터-스택으로 구성되어있다.

커널 주소 공간의 내용

커널은 운영체제에 함수 형태로 들어가 있어야 한다.

코드

  • 인터럽트가 들어왔을 때 운영체제가 CPU에 넘어가는데, 이 때 무엇을 처리해야 하는지 운영체제의 커널에 다 들어있다.
    따라서 CPU에서 사용자 프로그램을 수행할 수 없는 특권 명령어 기계어를 실행할 때 운영체제에 대신 해달라고 요청하는데,
    예를 들어 모든 I/O작업은 특권 명령으로 묶여있기 때문에, 사용자 프로그램이 디스크에서 파일을 읽어올 때 운영체제에 대신 해달라고 요청하는 것.
    이 때 운영체제는 그 파일을 읽는 코드가 있어야 하는데 이게 바로 시스템 콜이며, 이는 커널 코드에 들어있다.

데이터

PCB : Process Controll Block

  • 운영체제의 데이터 영역에 존재하는, 모든 하드웨어들을 관리하기 위한 자료구조
  • 모든 프로세스들을 관리하기 위한 자료구조

    예를 들어 컴퓨터 안에 프로세스가 10개 돌아가고 있다면, 운영체제는 PCB를 10개 만들어서 관리

스택

운영체제의 스택은 조금 특이한 구조로 구성되어있다.

프로그램 A가 실행하다가 운영체제에 시스템 콜을 해서 서비스를 요청할 수 있는데, 각각 프로그램에 의해 운영체제가 호출이 되고 있는데

누구의 서비스를 수행하기 위해 운영체제 코드가 실행되냐에 따라 커널의 스택은 별도로 두고 있다.

예를 들어, 프로그램 A가 실행되다가 운영체제에 요청 -> 운영체제 코드가 실행 -> 운영체제도 함수로 되어있기 떄문에 스택에 쌓임
이렇게 A에 의해 운영체제가 호출된 거라면 커널 스택은 A의 커널 스택 사용,
B를 실행되다가 운영체제가 호출된 거라면 B의 커널 스택 사용
이런 식으로 각 프로세스마다 별도로 두고 있다. 이는 일반적인 사용자 프로그램의 스택과는 다른 점

  • 커널 함수와 관련된 스택
    다만 커널에 들어오기 전에 누구 때문에 호출되었는지에 따라 별도의 스택을 사용하는 것

사용자 프로그램이 사용하는 함수

함수(Function)

  • 사용자 정의 함수

    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수

    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다
  • 커널 함수

    • 운영체제 프로그램의 함수 (운영체제에 들어있는 함수)
    • 커널 함수의 호출 = 시스템 콜

따라서
사용자 정의 함수 , 라이브러리 함수는 프로세스 A의 Address Space, 내가 만든 프로그램에 들어있는 코드
커널 함수는 내가 갖다 쓰긴 했지만 커널에 들어있는 Kernel Address Space

내가 실행되다가 디스크에서 파일을 읽어온다든지 하는 I/O는 커널에 정의된 함수이기 때문에 사용자 프로그램 안에서 실행되는 게 아니라 커널로 CPU 제어권이 넘어가서 커널 함수가 실행됨! 바로 시스템 콜로~

시스템 콜(System Call)

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
    가상 메모리의 주소 공간을 가로 질러서 다른 프로그램의 영역으로 완전히 바뀌는 것.
    CPU 제어권을 운영체제에 넘겨야 하기 때문에 인터럽트 라인을 세팅해서 CPU 제어권이 운영체제에 넘어간 후 실행을 한다

프로그램의 실행


내가 정의하거나 내가 정의하지 않은 라이브러리 함수, 운영체제의 커널 함수를 불러 사용할 때가 있음.
사용자 정의 함수, 라이브러리 함수 : 내 주소 공간에 있는 코드가 USER MODE에서 실행
커널 함수 : 시스템 콜을 호출하면, CPU 제어권이 운영체제에 넘어가서 KERNEL MODE에서 운영체제의 주소 공간에 있는 코드가 실행

프로그램이 실행되면 USER MODE - KERNEL MODE 를 왔다갔다 반복하다가 언젠가는 종료된다.

0개의 댓글