CS 질문

- Blocking I/O & Non-Blocking I/O

I/O 작업은 Kernel level에서만 수행할 수 있다. 따라서, Process, Thread는 커널에게 I/O를 요청해야 한다.

Bloking I/O
1) Process(Thread)가 Kernel에게 I/O를 요청하는 함수를 호출
2) Kernel이 작업을 완료하면 작업 결과를 반환 받음.


특징

  • I/O 작업이 진행되는 동안 user Process(Thread) 는 자신의 작업을 중단한 채 대기
  • Resource 낭비가 심함(I/O 작업이 CPU 자원을 거의 쓰지 않으므로)

Non-Blocking I/O
1) User Process가 recvfrom 함수 호출 (커널에게 해당 Socket으로부터 data를 받고 싶다고 요청함)
2) Kernel은 이 요청에 대해서, 곧바로 recvBuffer를 채워서 보내지 못하므로, "EWOULDBLOCK"을 return함.
3) Blocking 방식과 달리, User Process는 다른 작업을 진행할 수 있음.
4) recvBuffer에 user가 받을 수 있는 데이터가 있는 경우, Buffer로부터 데이터를 복사하여 받아옴. (Memory간 복사로 인해, I/O보다 훨씬 빠른 속도로 data를 받아올 수 있음.)
5) recvfrom 함수는 빠른 속도로 data를 복사한 후, 복사한 data의 길이와 함께 반환함.

- 세마포어(Semaphore) & 뮤텍스(Mutex)

mutual exclusion을 위해 나온 방식
세마포어 : 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
임계 구역(Critical Section) : 여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

세마포어 P, V 연산
P : 임계 구역 들어가기 전에 수행 ( 프로세스 진입 여부를 자원의 개수(S)를 통해 결정)
V : 임계 구역에서 나올 때 수행 ( 자원 반납 알림, 대기 중인 프로세스를 깨우는 신호 )

뮤텍스(상태가 0, 1로 이진 세마포어) : 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
상호 배제(Mutual Exclusion)의 약자임
해당 접근을 조율하기 위해 lock과 unlock을 사용한다.

  • lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
  • unlock : 현재 임계 구역을 모두 사용했음을 알림. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 )

- 페이징과 세그먼테이션

사용 이유 : 다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 작업이 필요해서

관리 기법
1. 연속 메모리 관리 : 프로그램 전체가 하나의 커다란 공간연속적으로 할당되어야 함

  • 고정 분할 기법 : 주기억장치가 고정된 파티션으로 분할 (내부 단편화 발생)
  • 동적 분할 기법 : 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재 (외부 단편화 발생)

  1. 불연속 메모리 관리 : 프로그램의 일부서로 다른 주소 공간에 할당될 수 있는 기법
    페이지 : 고정 사이즈의 작은 프로세스 조각
    프레임 : 페이지 크기와 같은 주기억장치 메모리 조각
    세그먼트 : 서로 다른 크기를 가진 논리적 블록이 연속적 공간에 배치되는 것

불연속 메모리 관리의 종류
1. 단순 페이징 : 각 프로세스는 프레임들과 같은 길이를 가진 균등 페이지로 나뉨
소량의 내부 단편화 존재
외부 단편화 X


2. 단순 세그먼테이션 : 각 프로세스는 여러 세그먼트들로 나뉨
내부 단편화 X, 메모리 사용 효율 개선, 동적 분할을 통한 오버헤드 감소
외부 단편화 존재


3. 가상 메모리 페이징 : 단순 페이징과 비교해 프로세스 페이지 전부를 로드시킬 필요X
필요한 페이지가 있으면 나중에 자동으로 불러들어짐
...
외부 단편화 X
복잡한 메모리 관리로 오버헤드 발생


4. 가상 메모리 세그먼테이션 : 필요하지 않은 세그먼트들은 로드되지 않음
필요한 세그먼트 있을때 나중에 자동으로 불러들어짐
내부 단편화X
...
복잡한 메모리 관리로 오버헤드 발생

- 클린코드와 리팩토링

클린 코드 : 가독성이 높은 코드

가독성을 향상 하려면?

  • 네이밍이 잘 되어야 함
  • 오류가 없어야 함
  • 중복이 없어야 함
  • 의존성을 최대한 줄여야 함
  • 클래스 혹은 메소드가 한가지 일만 처리해야 함

리팩토링 : 프로그램의 외부 동작은 그대로 둔 채, 내부의 코드를 정리하면서 개선하는 것을 말함
=> 코드의 가독성을 높이고, 향후 이루어질 유지보수에 큰 도움

필요한 코드의 경우는?

  • 중복 코드
  • 긴 메소드
  • 거대한 클래스
  • Switch 문
  • 절차지향으로 구현한 코드

새로운 기능을 추가할 때 리팩토링이 필요 그러나, 우선적으로 기능부터 하는 것이 중요함.
객체지향의 특징을 살리기 위해 switch문은 오버라이드로 수정.



신문

- "난 죽어라 빚 갚는데"…세금으로 대출원금 최대 90% 탕감 논란 가열

코로나19 사태로 피해를 입은 자영업자, 소상공인 등 취약층의 빚 부담을 경감해 주는 정부의 대책을 놓고 형평성 논란이 가열
이번 발표에는 빚투(빚내서 투자)로 투자 손실을 크게 입은 청년층 대상 대책도 포함됐다

한탕 쳐보려고 감당할 수 없는 빚을 내서 투자를 했으면 이를 상환하기 위한 노력을 해야하는것이 당연하다. 국가에서 구제를 해준다고 해도 그럴꺼면 진짜 왜 다들 빚내서 투자안하냐? 이건 좀 에바인 듯함.

- 개에 물린 초등생, 그냥 지나친 시민…"무책임" VS "비난 안돼"

일부 누리꾼은 그냥 지나쳐버린 행인을 나무라기도 했다.

일부가 문제다.. 일부가

- 당국 "켄타우로스 유입에도 방역변경 없어…검역강화 효과 작아"

"오미크론 이후 변이, 전파력 강해도 치명률-중증화율 떨어지는 특성"

걍 코로나에서 변이를 해도 할 수 있는게 별로 없는듯 하다. 다들 조심합시다.

- 네이버·카카오 2분기 실적 성장세 둔화…하반기 반등 기대해도 될까

증권가는 광고와 전자상거래 시장 둔화를 주요 원인으로 보고 있다.
이에 더해 네이버는 올해 연봉 재원을 10% 인상하기로 결정해 인건비 부담도 커진 상태다.
카카오는 올해 연봉 재원을 인상하기로 했는데 인상률이 15%로 네이버 보다 높다.

진짜 인건비는 생각보다 더 큰 부분을 차지 한다. 채용을 많이 한다의 의미는 결국 사람이 필요한데 그만큼의 지출이 있다고 해석해야 겠다. 새로운 아이템으로 마케팅이라도 한다면 지출을 더 불가피해 실적이 그렇게 좋지는 않을 것이다. 그렇다면 이 때가 매수 타이밍이 되겠다.



0개의 댓글