ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS: 프로그램의 구조, 인터럽트, Syscall, 프로세스 실행 상태
    os 운영체제 2024. 3. 28. 18:58

    프로그램의 구조:

    프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소가 메모리에 올라가 있어야 함.

    프로그램의 주소 영역:

    • 코드 : 프로그램 함수들의 코드가 기계어 명령 형태로 변환되어 저장되는 부분
    • 데이터 : 전역 변수등 프로그램이 사용하는 데이터는 저장하는 부분
    • 스택 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 부분

    인터럽트:

    • 인터럽트 때문에 CPU를 빼앗긴 위치는 운영체제가 관리하는 PCB(프로세스 제어 블록)에 저장됨
    • 인터럽트가 발생하면 PCB에 해당 프로그램의 수행 위치를 저장.
    • 인터럽트 처리 후 PCB에 저장된 주소를 복원시켜 원래 하던 일을 재개.

    CPU는 PC가 가리키는 메모리 위치의 프로그램을 수행한다.

    CPU가 운영체제의 코드를 수행중이라면 커널모드(kernel mode)에서 수행 중이라고 하며

    사용자 프로그램이 존재하는 메모리 위치를 수행중이라면 사용자모드(user mode)에서 CPU가 수행되고 있다고 한다.

     

    cpu가 수행하는 명령에는 일반, 특권 명령이 있음. (cpu는 모드비트로 이를 체크)

    특권명령의 경우 sys call로 운영체제에게 대행을 요청함

        일반명령 : 모든 프로그램이 수행할 수 있는 명령 (ex. 메모리에서 자료를 읽고 결과를 쓰는 등의 명령들)

        특권명령 : 보안이 필요한 명령으로 각종 장치에 접근하는 명령. 항상 운영체제만이 수행할 수 있다.

     

    커널의 영역들:

        데이터 영역:

            각종 자원을 관리하기 위한 자료구조가 저장됨 (PCB, 하드웨어 자원의 관리를 위한 자료구조 등)

        스택 영역:

            수행 중인 프로세스마다 별도의 스택으로 관리

            특권명령이 다른 함수를 호출하면 복귀 주소가 커널 내부. (사용자 프로그램 스택 외 별도의 저장공간이 필요함)

            커널은 모든 사용자 프로그램이 sys call로 접근 가능 = 일관성을 위해 프로세스마다 커널 내 별도의 스택을 둠.

        정리: 

            사용자 프로그램에서의 함수호출/복귀 = 자기 주소 공간 내의 스택.

            syscall, interrupt의 함수호출/복귀 = 커널 스택

     

    프로그램의 코드 영역에 기계어 명령 형태로 존재:

        사용자 정의 함수: 프로그래머 본인이 직접 작성한 함수
        라이브러리 함수: 이미 누군가 작성해 놓은 함수를 호출만 하여 사용하는 함수

     

    운영체제 커널의 코드에 정의된 함수:

        시스템 콜 함수: 사용자 프로그램이 운영체제의 서비스를 요청하기 위해 호출하는 함수
        인터럽트 처리 함수: 각종 하드웨어 및 소프트웨어가 CPU의 서비스를 요청하기 위해 발생시키는 함수

     

    system call:

        자신이 아닌 다른 프로그램의 주소 공간에 존재하는 함수를 호출하는 것.

        인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 커널 함수를 호출. 

        과정:

        1. 사용자 프로그램이 디스크의 파일을 읽어오기 위해 시스템 콜로 커널 함수를 호출한다.
        2. 사용자 프로그램은 CPU의 제어권을 운영체제에 이양한다(인터럽트 라인 세팅 명령을 통해)
        3. CPU는 현재 명령의 수행을 마친 후 인터럽트가 발생했는지 점검하는데,

            이 때 인터럽트가 발생한 것을 확인하고 현재 수행 중인 프로그램을 잠시 멈춘 후 CPU의 제어권을 운영체제에 넘긴다.
        4. 운영체제는 설정된 인터럽트 라인에 의해 이번에 발생한 인터럽트가 입출력을 요청하는 인터럽트임을 인지하게 된다.
        5. 해당 서비스루틴으로 이동해 입출력 작업을 수행한다. CPU는 디스크 컨트롤러에게 파일을 읽어오라는 명령을 한다.
        6. 운영체제는 CPU의 제어권을 다른 프로세스에게 이양한다.
        7. 입출력 작업이 완료되면 디스크 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력 작업이 완료되었음을 알린다.

            CPU는 사용자 프로세스의 수행을 잠시 멈추고 인터럽트 처리루틴으로 제어권이 넘어간다.
        8. 디스크로부터 로컬버퍼로 읽어온 내용을 컴퓨터 내의 메모리로 복사한 후,

            디스크 입출력을 요청했던 프로세스에게 다시 CPU를 획득할 수 있는 권한을 준다.
        9. 해당 프로세스는 CPU를 기다리는 큐에 삽입되고 CPU의 제어권은 다시 인터럽트를 당한 프로세스로 남어가

            하던 작업을 계속 수행한다.

     

    사용자모드/커널모드 실행상태:

        사용자모드: 프로세스가 자신의 코드를 실행함

        커널모드: 프로세스가 커널의 코드를 실행함, cpu의 제어권이 os에 있지만 프로세스가 가지고 있다고 표현(대행의 개념)

     

    출처

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

    OS: RPC  (0) 2024.04.08
    OS: 프로세스, IPC, fork/exec  (0) 2024.04.03
    OS: 스풀, CISC, 데드락  (0) 2024.03.27
    컴퓨터 구조: 어드레싱 모드란?  (0) 2024.03.25
    OS 5강: 프로세스 스케줄링  (0) 2024.03.01
Designed by Tistory.