본문 바로가기
2023 활동 - 4학년/[1월 ~ 4월] sw 아카데미 백엔드 과정

[2023.02.09 / CNU SW 아카데미] 27일차 회고록

by 은행장 노씨 2023. 2. 13.

코딩테스트 

문제
: 문자열의 인덱스가 주어졌을 때(처음, 끝), 두 인덱스 사이의 e가 몇 번 등장했는지 출력하라. 

이번 주에 계속 나온 누적합과 비슷하다. 

 

OS 특강(10:00 - 12:00)

장소 : 정심화 본부 세미나실
강사 : 충남대학교 김종익 교수님
시간 : 10:00 - 12:00

배운 내용은 아래와 같다. 

더보기

세마포어 Semaphore

변수를 저장하는 시그널이다. 
wait, signal -> 예전에는 P, V 연산이라고 불렀다.
   다익스트라라는 분이 있었다. 
   세마포어도 다익스트라가 만들었다.
   네덜란드 사람이다. 
   예전에는 wait, signal 의 네덜란드 약어를 사용했었다.(P, V)

세마포어는 정수 변수다. 
- wait 값이 0보다 같거나 작을 때까지 기다려요
   세마포어 값을 양수의 경우에만 감소시킨다. 
- signal 은 세마포어 값을 하나 증가시킨다. 

- 초기값이 3이라면, 문제없이 들어갈 수 있는 순서다. 
   코드 섹션에 진입할 수 있는 프로세스의 개수
- 바이너리 세마포어 = 뮤텍스
- 카운팅 세마포어 : 값을 지정
- 특정한 순서를 부여하고 싶을 경우 사용
- busy waiting : cpu를 계속 사용한다. 

-> block, wake up
   정수 변수 뿐만 아니라 세마포어에 대기하고 있는 프로세스들을 킵하는 리스트를 또 가지고 있다. 
   비지 웨이팅 하지 말고 그냥 리스트로 ㄱㄱ
- 일단 감소 -> 값 확인 -> 0 보다 작으면 들어간다. 
- 세마포어의 값이 음수이면, 대기하는 애가 있다. 

 

* Deadlock

- lock을 잡고 block 되었다. 
- 깨어나서 놔 주기 전까지 ;lock을 잡고 있다. 
- 서로서로 잡고 있다. 
- 진행이 불가능하다. 무한정 기다리게 된다. 

 

* Starvation

- 버스가 오면 한 번에 한 사람만 태운다.
- 경로우대라서 나이 많은 사람만 태운다. 
- 꼬마가 기다리고 있다. 
- 계속 나이 많은 사람이 온다. 
- 꼬마는 계속 기다린다
- 굶어죽는다. 

* Synchronization

 


다음의 예시는 기본적인 상식으로 알아두는 것이 좋다. 
bounded-buffer problem
   - producer, consumer
   - 무택스, full(0), empty(n)
   - 하나의 컨슈머는 하나를 꺼내갈 수 있다. 
   - 단순하게 뮤택스로만 막혀 있으면 버퍼가 꽉 차 있으면 할 일이 없다. 나와야 한다. 
   - 채우지 않고 나오는 것은 낭비다. 

Readers, Writers 
   - 쓰기는 한놈만 해야 한다. 
   - 읽는 건 상관 없다. 
   - 처음 들어왔으면 읽기/쓰기를 독점해야 한다. 
   - 마지막 독자는 쓰기 권한을 줘야 한다. 

Dinning Philsophers
   - 다섯 명의 철학자가 앉아 있다. 
   - 철학자는 포크 두 개로 먹어야 한다. 포크 점유 
   - 모든 철학자가 배고파서 오른쪽 포크를 쥐었다. 
   - 데드락, starvation 문제 다 생길 수 있다. 

- Functional programming language
   - 함수형 값을 업데이트 하지 않는다. 
   - 변수 값을 바꾸는 행위는 하지 않는다.