OS

Growing_HJ·2024년 8월 8일

운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램.

  1. 프로세스
  • 프로세스는 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리 일 분이지만,
    보조 기억 장치에 저장된 프로그램을 메모리에 적재하고, 실행하는 순간 그 프로그램은 프로세스가 된다
    -> 현재 실행중인 프로그램. !!

포그라운드 프로세스 -> 사용자 보는 앞에서 실행되는 프로세스
백그라운드 프로세스 -> 사용자가 보지 못하는 뒤에서 실행중인 프로세스
-> 데몬 프로세스 (유닉스 운영체제에서 사용하는 말 ! ) !!

PCB
1. 모든 프로세스는 실행을 위해 CPU 를 필요로 하지만, CPU 자원은 한정되어 있다.
즉 모든 프로세스가 CPU를 동시에 사용할 수는 없다!

프로세스들은 차례대로 돌아가면서 한정된 시간 만큼간 CPU 를 사용한다.

자신의 차례가 되면 정해진 시간만큼 CPU를 사용을하고, 시간이 끝났으면 이를 알리는
! 인터럽트 (타이머 인터럽트) 가 발생한다. !
자신의 차례를 양보를 하고, 다음차례가 올때까지 또 기다림.

운영체제는 빠르게 번갈아 수행되는 프로세스의 실행순서를 관리하고, 프로세스에 CPU를 비롯한 자원들을 분배함

-> 프로세스와 관련된 정보를 저장하는 자료구조
PCB의 생성 위치 : 커널영역
PCB의 생성 시기 : 프로세스 생성 시에 생성, 그리고 실행이 끝나면 폐기가 됨,
새로운 프로세스가 생성되었음 = PCB 가 생성이 되었음.

PCB 에 담긴 정보
1. 프로세스 아이디 PID
2. 레지스터 값
(레지스터
프로세서에 위치한 고속 메모리로 극히 소량의 데이터나 처리 중인 중간 결과와도 같은 프로세서가 바로 사용할 수 있는 데이터를 담고 있는 영역)
-> 프로세스는 자신의 실행 순서가 종료되면 이전까지 사용했던 레지스터의 중간값들을 모두 복원함.
그래야만 이전까지 진행했던 작업들을 그대로 이어 실행할 수 있기 때문에!!
=> 해당 프로세스가 실행을하면서 자신이 사용했던 프로그램을 비롯해 레지스터 값들이 포함됨.

  1. 프로세스의 상태
  2. CPU 스케줄링의 정보
  3. 메모리 관리 정보
  4. 사용한 파일과 입출력장치의 목록

Context switching (문맥 교환)

  • 기존 프로세스의 문맥을 PCB 에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB 로 부터 복구하여 새로운 프로세스를 실행하는 것

  • 정적할당 영역 (코드 + 데이터 영역)
    프로세스의 메모리 영역
    코드 영역
    -> 텍스트 영역 : 실행할 수 있는 코드 , 기계어로 이루어진 명령어가 저장이 됨.
    CPU가 실행할 명령어가 담겨 있기 때문. 읽기 전용 공간

데이터 영역

  • 전역 변수가 저장되는 영역.

  • 프로그램이 실행되는 동안 유지할 데이터가 저장됨.
    -> 프로그램이 실행되는 동안 유지가 되며, 프로그램 전체에서 접근할 수 있는 변수가 저장되는 영역

  • 동적 할당 영역
    힙 영역

  • 프로그램을 만드는 사용자, 프로그래머가 직접적으로 할당할 수 있는 저장공간
    메모리 누수 - 할당한 영역을 다시 반환해 주지 않을 경우 생기는 메모리상의 문제

스택 영역

  • 스택 영역은 데이터를 일시적으로 저장하는 공간.
    매개변수 + 지역변수가 대표적 -> 일시적으로 사용할 데이터 정도로 생각해도 무방데스

힙영역 -> 메모리의 낮은 주소 -> 높은 주소 할당
스택 영역 -> 메모리의 높은 주소 -> 낮은 주소 할당

Q. 프로세스와 관련한 설명 중 옳지 않은 것은? 4
1. 실행되는 프로그램을 프로세스라 한다.
2. 프로세스가 생성되면 커널 영역에 PCB 가 생성된다.
3. 프로세스들으 문맥 교환을 통해 번갈아 가면서 수행된다.
4. 프로세스는 반드시 사용자와 상호작용을 할 수 있어야 한다.

Q. 문맥 교환과 관련한 설명 중 옳지 않은 것? 1.
1. 문맥 교환은 빠르게 실행될 수록 좋다
-> 문맥 교환이 지나치게 빠르게 반복이 되면 문맥 교환에 드는 오버헤드로 인해 좋지않음
2. 문맥 교환 과정에서 직전에 수행되던 프로세스의 문맥이 백업된다.
3. 문맥 교환 과정에서 다음에 수행할 프로세스의 문맥이 복구된다.
4. 문맥은 프로세스 제어 블록에 기록된다.

프로세스 상태와 계층 구조
프로세스의 상태
1. 생성(new)
-> 프로세스를 생성중인 상태
-> 이제 막 메모리에 적재되서 PCB 를 할당받은 상태

  1. 준비 (Ready)
    -> 아직 자신의 차례가 아니기 때문에 기다리고 있는 상태

  2. 실행 상태 (run)
    -> CPU 를 할당 받아서 실행 중인 상태
    -> 실행 상태인 프로세는 할당된 일정 시간동안만 CPU를 사용할 수 있다.
    이때 프로세스가 할당된 시간을 모두 사용한다면 -> 타이머 인터럽트가 발생
    다시 준비상태로 돌아감.

실행 도중에 입출력 장치를 사용해서 입출력 작업이 끝날때까지 기다려야 하는 경우
=> 대기 상태로 감.

  1. 대기 (wait)
    -> 프로세스는 실행 도중 입출력 장치를 사용하는 경우가 종종 있다.
    입출력 작업은 CPU 에 비해 처리 속도가 느리다. 그래서 입출력 작업을 요청한 프로세스는 입출력 장치가 입출력을 끝낼 때 까지 (입출력 완료 인터럽트) 기다려야 한다.
    입출력 작업이 완료되면 해당 프로세스는 다시 준비상태로 가서 CPU 할당을 기다린다.

  2. 종료 (terminate)
    -> 프로세스가 종료된 상태

프로세스 계층 구조
부모 PID
- PPID

프로세스 생성 기법 - fork(), exec()
fork () - 자식 프로세스를 복제하는 syscall

  • 자신 프로세스의 복사본을 만드는 syscall.
    만들어진 복사본 (자식 프로세스) 는 exec() syscall 을 통해 자신의 메모리 공간을 다른 프로그램으로 교체함.

부모가 자식 프로세스를 실행하면서 프로세스 계층구조는 fork exec 가 반복되는 과정이라 볼 수 있음.

스레드 : 프로세스를 구성하는 가장 작은 실행 단위 !
스레드는 실행이 단위,
프로세스를 구성하는 실행의 흐름단위.

하나의 프로세스는 여러가지의 스레드를 가질 수 있음.
하나의 프로세스에서 여러 부분을 동시적으로 실행할 수 있음.

프로세스와 스레드~
단일 스레드 프로세스 : 한번에 하나의 부분만 실행되는 프로세스

멀티 프로세스와 멀티 스레드
멀티 프로세스 : 여러 프로세스를 동시에 실행하는 것.
멀티 스레드 ; 여러 스레드로 프로세스를 동시에 실행하는 것.

-> 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 프로세스 내의 스레드는 같은 프로세스 내의 자원을 공유한다.

0개의 댓글