Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Nest.js
- cookie
- Express
- flask
- Queue
- jest
- nestjs
- AWS
- mongoose
- Dinosaur
- 게임
- Bull
- nodejs
- MongoDB
- 정렬
- TypeScript
- dfs
- typeORM
- Python
- 공룡게임
- react
- MySQL
- 자료구조
- Sequelize
- game
- GIT
- class
- JavaScript
- OCR
Archives
- Today
- Total
포시코딩
[운영체제] 5. Process Synchronization (1) 본문
728x90
키워드
synchronization, race condition, critical section
데이터의 접근
추상적으로 아래와 같이 구분됨
- Storage Box: 데이터가 저장되어 있는 위치
- Execution Box: 실제 연산하는 위치
- 데이터를 읽기만 하면 누가 먼저 읽든, 읽는 동안 다른 곳에서 읽든 문제될 게 없지만
- 데이터를 읽어와 연산 후 데이터를 수정하여 저장하는 방식에서는
누가 먼저 읽었느냐에 따라 결과가 달라질 수도 있는 등
여기서 생기는 문제를 Synchronization 문제라고 한다. - 마찬가지로 한 곳에선 데이터를 증가시키려 하고 다른 곳에선 데이터를 감소시키려 하면
문제가 발생 -> Race Condition(경쟁 상태) - Multiprocessor system처럼 메모리를 공유한다면 문제가 발생할 가능성 존재
- 프로세스는 자신만의 주소 공간에 접근할 수 있지만
공유 메모리를 사용할 수 있는 방법이 있기 때문에 그런 상황에서도 문제 발생 가능성 존재
- 제일 중요한건 운영체제 커널과 관련해서 생기는 문제다.
-> 일반적인 경우엔 프로세스가 자기 주소 공간만 접근하기 때문에 process synchronization과 관련된 문제가
발생할 일이 없지만 프로세스가 본인이 직접 실행할 수 없어 운영체제한테 요청하게 되는 부분에 대해서(시스템 콜)
커널의 코드가 그 프로세스를 대신해서 실행할 경우 (커널의 데이터 접근)
CPU를 뺏겨 다른 프로세스한테 넘어간 상황에서 해당 프로세스가 또 시스템 콜을 하여 운영체제한테 요청해서
커널의 코드가 실행되면서 커널의 데이터를 접근해 Race condition 문제가 발생할 수 있음 - 커널의 코드가 실행중일 때 인터럽트가 발생할 경우(인터럽트를 실행하는 코드도 커널의 코드)
- 유저 레벨에서는 문제가 발생하지 않아도 운영체제 커널로 들어가면 커널에 있는 데이터는
여러 프로세스들이 동시에 사용할 수 있는 공유 데이터이기 때문에 문제가 발생한다. - 중요한 값을 건드리는 동안은 인터럽트가 들어와도 작업이 끝날 때까지는 인터럽트를 disable시켰다가
작업이 끝난 후 처리되게끔 하여 문제가 발생하지 않도록 한다.
-> 무작정 막으면 비효율적이기에 어떻게 처리할지가 Process Synchronization의 주제 - 해결책: 커널 모드에서 수행 중일 때는 CPU를 preempt하지 않음
커널 모드에서 사용자 모드로 돌아갈 때 preempt
-> time sharing 시스템은 real time 시스템이 아니기 때문에 조금의 시간이 지체되었다고 해도 문제가 되지 않는다.
- CPU가 여러 개일 경우 (multiprocessor일 경우)
- interrupt enable/disable로 해결할 수 없음
- 방법 1: CPU가 데이터를 들고가면서 Lock을 걸고 저장이 끝난 후 Unlock하는 방법
- 방법 2: 사용자 프로그램이 아닌 운영체제의 커널을 여러 CPU가 동시에 접근하기 때문에 발생하는 문제
-> 커널을 접근하는 CPU를 매순간 하나만 접근하게 하는 방법(대신 비효율적)
Process Synchronizatioin 문제
- 공유 데이터(shared data)의 동시 접근(concurrent access)은
데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다. - 일관성(consistency) 유지를 위해서는 협력 프로세스(cooperating process)간의 실행 순서(orderly execution)를
정해주는 메커니즘이 필요하다. - Race condition
- 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황
- 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다.
- Race condition을 막기 위해서는 concurrent process가 동기화(synchronize)되어야 한다.
The Critical-Section Problem
(=임계구역 문제)
- Critical-Section: 공유 데이터를 접근하는 코드
- 하나의 프로세스가 critical section에 있을 때, 다른 모든 프로세스는 ciritical section에 들어갈 수 없어야 한다.
- 보통 프로그램의 코드는 critical section이거나 아니거나. 즉, 공유 데이터를 접근하는 코드이거나 아니거나의 반복이다.
그럼 이 앞뒤로 부가적인 내용을 추가해 race condition이 발생하지 않게 하는 소프트웨어적인 방법들이 존재한다.
-> 뒤이어 나올 알고리즘들
728x90
'CS (Computer Science)' 카테고리의 다른 글
[운영체제] 5. Process Synchronization (3) (0) | 2023.05.05 |
---|---|
[운영체제] 5. Process Synchronization (2) - The Critical Section Problem (0) | 2023.05.05 |
[운영체제] 4. CPU Scheduling (3) (0) | 2023.05.01 |
[운영체제] 4. CPU Scheduling (2) (0) | 2023.05.01 |
[운영체제] 4. CPU Scheduling (1) (0) | 2023.04.28 |