일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Unity #Indie Game
- STCF
- Trap
- SJF
- MLFQ
- OSI 7계층
- 배경 그림
- DSP
- 컴퓨터 네트워크
- polymorphism
- stride
- protection
- link layer
- SDLC
- 게임개발
- unity
- 게임 개발
- OWASP
- DP
- information hiding
- MAC
- 운영체제
- 유니티
- frequency-domain spectrum analysis
- Waterfall
- FIFO
- 메카님
- 유스케이스
- AINCAA
- Security
- Today
- Total
다양한 기록
제한된 직접 수행: restrict operation / context switching 본문
직접 수행 (Direct Execution)
어떤 프로그램을 수행시키고 OS가 더 간섭을 안하는 상태를 의미합니다.
가장 빠른 건 이 방법인데, 문제가 있습니다.
타임쉐어링이 안되니까 -> 계속 그 프로세스 하나만 실행될 것
프로세스 하나가 독점해버리는 문제가 발생합니다.
그래서 이에 대한 해결책이 제한된 직접 수행 (Limited Direct Execution)
사용하는 방법이 두가지 있습니다.
1. 제한된 명령어. Restrict Operation
일반적인 명령어들은 직접 수행을 하게 해 줍니다.
대신 몇몇 명령어들은 실행해달라고 부탁해야 합니다.
OS, 즉 커널은 이에 대해 부탁을 받고 실행을 해줍니다.
시스템 콜 이야기입니다.
유저모드, 커널모드를 왔다갔다 하는게 바로 이 이야기입니다.
이때 상태를 바꾸려면 트랩*을 걸어야합니다.
시그널: 일반적인 프로세스에 보내는 신호
트랩: OS에게 보내는 소프트웨어적 사건 신호
인터럽트: OS에게 보내는 하드웨어적 사건 신호
트랩이 발생하면
하드웨어에서 커널 스택에 레지스터를 보관/복구
커널/유저 모드로 이동
트랩 핸들러*/PC가 가리키는 곳으로 이동
*트랩핸들러: 부팅될 때, 각 트랩에 대한 처리 방법을 모아서 테이블을 만드는데 그게 트랩 테이블이고, 각각의 처리 방법이 트랩 핸들러
커널모드 / 유저모드 이동 간 반드시 하드웨어를 거치긴 해야 합니다.
그리고, 유저 모드에서 실행될 때는 직접 수행이 되고 있어서
제한적인 직접 수행이라 표현합니다.
2. 프로세스 간 스위칭. Switching between Processes
1번 방법으로 완벽하게 끝나는 문제가 아닙니다.
예를 들어, 시스템 콜을 쓰지 않고 무한 루프를 돌리면 OS는 CPU에 대한 제어권을 얻지 못합니다.
이를 방지하기 위해 타이머 인터럽트를 사용합니다.
일정 시간이 지나면 타이머 인터럽트를 발생 시키고, 커널 모드로 들어가 트랩 핸들러가 작동합니다.
그리고 돌아올 때 다른 프로세스로 전환시킵니다.
이때 사용되는 기술이 Context Switching* 입니다.
*Context Switching
CPU에서 스케줄링할 때 프로세스 간 전환은 당연히 일어나는 일입니다.
이때, 전환하기 전의 프로세스가 어디까지 진행했는지에 대한 정보를 반드시 알아야 다시 스케줄링 될 때 복구 가능합니다.
위에 굵게 표시해둔 글씨가 컨텍스트입니다. 자세히 말하자면 PC와 같은 레지스터 정보입니다.
PC가 다음 실행 명령어가 어디인지 알려주니까, 이걸 알면 어디까지 실행했는지 알 수 있습니다.
이걸 저장하는 걸 Context Save, 복구하는 걸 Context Restore 라고 합니다.
이러한 컨텍스트의 전환을 컨텍스트 스위칭이라 합니다.
인터럽트 중 인터럽트 발생, 혹은 시스템 콜 중 인터럽트가 발생하면
인터럽트를 디스에이블 시키거나, 혹은 우선순위를 두거나 할 수 있습니다.
보통 이건 Concurrency 문제입니다.
'운영체제' 카테고리의 다른 글
스케줄링 과정 그려보기, ART, ATT (0) | 2024.03.26 |
---|---|
MLFQ (Multi-Level Feedback Queue) (0) | 2024.03.25 |
스케줄링과 그 방법: FIFO, SJF, STCF, RR / Busy Waiting, Sleeping (0) | 2024.03.24 |
프로세스와 프로세스의 상태 (0) | 2024.03.17 |
가상화, 병행성, 영속성 (0) | 2024.03.04 |