TIL

[면접을 위한 CS 전공지식 노트] 2.네트워크/ 3.운영체제

비아 VIA 2022. 10. 2. 22:28

<면접을 위한 CS 전공지식 노트>를 읽는 8주간의 스터디가 지난주에 끝이 났다!
나는 다행히 8주 전체를 참여해서 보증급 환급 8만원 + 모인 벌금에서 차등 지급 8만원을 받았다.
내가 낸 보증금은 8만원이었는데 상금(?) 8만원까지 합쳐서 총 16만원을 환급받게 되었다.
벌금이 많았다는건 그만큼 다른분들이 많이 참여를 안한거여서 아쉽기도 하지만ㅠㅠ
그 아쉬움을 금융치료 했다 허허

기본적인 CS 지식들을 쭉 한번 살펴볼 수 있어서 좋았고
매주 일요일 오전 9시에 스터디를 했기에 주말을 부지런히 보낼 수 있었다.
사놓고 꽤 오래 혼자서는 안읽던 책이었는데 이렇게 강제성을 가진 스터디를 하는게 나에게는 잘 맞는 것 같다.

오늘 내용은 지난번에 쓴 네트워크 1편
에 이은 네트워크 정리 2편 및 운영체제 정리이다.

2. 네트워크

2.3 네트워크 기기

2.3.1 네트워크 기기의 처리 범위

- 네트워크 기기는 계층별로 처리 범위를 나눌 수 있다.
- 상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만 그 반대는 불가하다

2.3.2 애플리케이션 계층을 처리하는 기기

- 애플리케이션 계층을 처리하는 기기는 L7 스위치가 있다
- 스위치는 여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기 신호를 보내 데이터를 전송한다
- 로드밸런스라고도 하며 서버의 부하를 분산한다
- 로드밸런서로는 L4 스위치도 있다. L4 스위치는 인터넷 계층을 처리하는 기기로 스트리밍 관련 서비스에서는 사용할 수 없다. IP와 포트를 기반으로 트래픽을 분산한다
- L7 로드밸런서는 IP, 포트 이외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다
- 헬스체크는 전송 주기와 재전송 횟수 등을 설정한 이후 반복적으로 서버에 요청을 보내는 것이다.
- 로드밸런서는 대표적인 기능으로 서버 이중화를 들 수 있다.

2.3.3 인터넷 계층을 처리하는 기기

- 인터넷 계층을 처리하는 기기로는 라우터, L3 스위치가 있다
- 라우터는 여러 개의 네트워크를 연결, 구분시켜주는 역할을 한다
- L3 스위치란 L2 스위치의 기능과 라우팅 기능을 갖춘 장비를 말한다. L3 스위치를 라우터라고 해도 무방하다

2.3.4 데이터 링크 계층을 처리하는 기기

- 데이터 링크 계층을 처리하는 기기로는 L2 스위치와 브리지가 있다.
- L2 스위치는 장치들의 MAC 주소를 MAC 주소 테이블을 통해 관리하며 연결된 장치로부터 패킷이 왔을 때 패킷 전송을 담당한다
- 브리지는 두 개의 근거리통신망을 상호 접속할 수 있도록 하는 통신망 연결 장치이다. 포트와 포트 사이의 다리 역할을 한다.

2.3.5 물리 계층을 처리하는 기기

- NIC, 리피터, AP가 있다.
- NIC는 2대 이상의 컴퓨터 네트워크를 구성하는 데 사용한다. 네트워크와 빠른 속도로 데이터를 송수신할 수 있도록 컴퓨터 내에 설치하는 확장 카드이다.
- 리피터는 들어오는 약해진 신호 정도를 증폭하여 다른쪽으로 전달하는 장치이다.
- AP는 패킷을 복사하는 기기이다.

2.4 IP 주소

2.4.1 ARP

- 컴퓨터와 컴퓨터 간의 통신은 IP 주소에서 ARP를 통해 MAC 주소를 찾아 MAC 주소를 기반으로 통신한다.
- ARP는 IP 주소로부터 MAC 주소를 구한다.

2.4.2 홉바이홉 통신

- IP 주소를 통해 통신하는 과정을 홉바이홉 통신이라고 한다.
- 여기서 홉이란 통신망에서 각 패킷이 여러 개의 라우터를 건너가는 모습을 비유적으로 표현한 것이다.
- 라우팅 테이블은 송신지에서 수신지까지 도달하기 위해 사용된다. 라우터에 들어가 있는 목적지 정보들과 그 목적지로 가기 위한 방법이 들어있는 리스트이다.
- 게이트웨이는 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 관문 역할을 하는 컴퓨터나 소프트웨어를 일컫는다.

2.4.3 IP 주소 체계

- IP 주소는 IPv4와 IPv6으로 나뉜다. IPv4는 32비트를 8비트 단위로 점을 찍어 표기하며 IPv6는 64비트를 16비트 단위로 점을 찍어 표기한다.
- IP 주소 체계는 처음에는 A, B, C, D, E 다섯 개의 클래스로 구분하는 클래스 기반 할당 방식을 썼다.
- 클래스 기반 할당박식은 앞에 있는 부분을 네트워크 주소, 그 뒤에 있는 부분을 컴퓨터에 부여하는 주소인 호스트 주소로 놓아서 사용한다.
- 하지만 클래스 기반 방식은 사용하는 주소보다 버리는 주소가 많은 단점이 있다.
- DHCP는 네트워크 장치의 IP 주소를 수동으로 설정할 필요 없이 인터넷에 접속할 때마다 자동으로 할당할 수 있다.
- NAT는 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법이다.
- NAT는 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속할 수 있지만 호스트 숫자에 따라서 접속 속도가 느려질 수 있다는 단점이 있다.

2.4.4 IP 주소를 이용한 위치 정보

- IP 주소는 인터넷에서 사용하는 네트워크 주소기이 때문에 이를 통해 동 또는 구까지 위치 추적이 가능하다.

2.5 HTTP

2.5.1 HTTP/1.0
- HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다. 이는 RTT 증가를 불러오게 된다.
- RTT는 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간이며 패킷 왕복시간이다.
- 이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인터딩을 사용한다.
- 이미지 스플리팅: 이미지가 합쳐 있는 하나의 이미지를 다운로드 받고 이를 기반으로 백그라운드 이미지의 포지션을 이용하여 이미지를 표기하는 방법니다.
- 코드압축: 코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법이다.
- 이미지 Base64 인코딩: 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법이다.

2.5.2 HTTP/1.1

- 매번 TCP 연결을 하는 것이 아니라 한번 TCP 초기화를 한 이후에 keep-alive 라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었다.
- HOL Blocking: 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상이다.
- 헤더에 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무겁다

2.5.3 HTTP/2

- 지연시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.
- 멀티플렉싱: 여러 개의 스트림을 사용하여 송수신 하는 것이다. 특정 스트림의 패킷이 손실되어도 해당 스트림에만 영향을 미친다.
- 헤더 압축: 허프만 코딩 압축 알고리즘을 사용하여 헤더를 압축시킨다.
- 서버 푸시: 클라이언트의 요청 없이 서버가 바로 리소스를 푸시할 수 있다.

2.5.4 HTTPS

- 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 요청을 말한다. 이를 통해 통신을 암호화 한다.
- SSL/TLS: 전송 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 제3자가 메시지를 도청하거나 변조하지 못하도록 한다.
- 보안세션: 보안이 시작되고 끝나는동안 유지되는 세션을 말한다.
- 사이퍼 슈트: 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말한다.
- 인증 메커니즘: CA에서 발급한 인증서를 기반으로 이루어진다. CA에서 발급한 인증서는 공개키를 클라이언트에 제공하고 사용자가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다.
- 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다.
- CA 발급 과정: 자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제출해야 한다. 이후 CA는 공개키를 해시한 값인 지문을 사용하는 비밀키 등을 기반으로 인증서를 발급한다.
- 암호화 알고리즘: 키 교환 암호화 알고리즘으로는 ECDHE 또는 DHE를 사용한다. 둘다 디퍼-헬만 방식을 근간으로 만들어졌다.
- 해싱 알고리즘: 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘이다.
- HTTPS는 SEO에도 도움이 된다.
- HTTPs를 구축하기 위해서는 직접 CA에서 구매한 인증키를 기반으로 구축하거나, 서버 앞단의 HTTPS를 제공하는 로드밸런서를 두거나 CDN을 둔다.

2.5.5 HTTP/3

- TCP 기반이 아닌 UDP 기반으로 돌아간다. 멀티플렉싱을 가지고 있으며 초기 연결 설정 시 지연 시간이 감소된다.
- QUIC는 통신을 시작할때 3-웨이 핸드셰이크 과정을 거치지 않아도 된다.
- 순방향 오류 수정 매커니즘이 적용되어 있어 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정한다.
- 열악한 네트워크 환경에서도 낮은 패킷 손실률을 자랑한다.

운영체제

3.1 운영체제와 컴퓨터

  • 운영체제는 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스다.
  • 한정된 메모리나 시스템 자원을 효율적으로 분배한다

3.1.1 운영체제의 역할과 구조

  • 운영체제의 역할
    • CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환 관리
    • 메모리 관리: 한정된 메모리를 어떤 프로세스에 얼만큼 할당할지 관리
    • 디스크 관리: 디스크 파일을 어떠한 방법으로 보관할지 관리
    • I/O 디바이스 관리: 마우스, 키보드와 컴퓨터 간에 데이터 주고받는 것을 관리
  • 운영체제의 구조
    • GUI, 시스템콜, 커널, 드라이버
    • GUI: 사용자가 전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 형태
    • 드라이버: 하드웨어를 제어하기 위한 소프트웨어
    • CUI: 그래픽이 아닌 명령어로 처리하는 인터페이스
  • 시스템콜
    • 운영체제가 커널에 접근하기 위한 인터페이스. 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씀. 컴퓨터 자원에 대한 직접 접근을 차단하고 프로그램을 다른 프로그램으로부터 보호할 수 있음
    • 추상화 계층이기 때문에 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 크게 신경쓰지 않고 프로그램 구현 가능
    • modebit: 시스템콜이 작동될 때 modebit을 참고하여 유저모드와 커널모드 구분. 0은 커널모드, 1은 유저모드로 설정. 유저 모드일 경우 시스템콜을 못하게 막아서 한정된 일만 하게 함

3.1.2 컴퓨터의 요소

  • CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어졌다.
  • CPU: 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치. 인터럽트에 의해 메모리에 존재하는 명령어를 해석해서 실행
    • 제어장치: 프로세스 조작을 지시하는 CPU의 한 부품. 입출력장치 간 통신 제어, 명령어를 읽고 해석, 데이터 처리를 위한 순서 결정
    • 레지스터: CPU 안에 있는 빠른 임시기억장치. CPU는 자체적으로 데이터를 저장할 수 없어서 레지스터를 거쳐 데이터를 전달
    • 산술논리연산장치: 덧셈, 뺄셈 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로
    • 인터럽트: 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것
      • 하드웨어 인터럽트: IO 디바이스에서 발생하는 인터럽트
      • 소프트웨어 인터럽트: 트랩이라고도 함. 프로세스가 시스템콜을 호출할 때 발동
  • DMA 컨트롤러
    • I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치
    • CPU 부하를 막아주며 하나의 작업을 CPU와 DMA 컨트롤러라 동시에 하는 것을 방지
  • 메모리
    • 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치
    • CPU는 계산을 담당, 메모리는 기억을 담당
  • 타이머
    • 몇 초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간 제한을 다는 역할
  • 디바이스 컨트롤러
    • 컴퓨터와 연결되어있는 IO 디바이스들의 작은 CPU

3.2 메모리

3.2.1 메모리 계층

  • 메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성

  • 레지스터: CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량 가장 적음

  • 캐시: L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억 용량이 적음

  • 주기억장치: RAM. 휘발성, 속도 보통, 기억 용량 보통

  • 보조기억장치: HDD, SDD. 휘발성, 속도 낮음, 기억 용량 많음

  • 캐시:

    • 데이터를 미리 복사해 놓음 임시 저장소, 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리

    • 지역성의 원리: 캐싱을 직접 설정할 때 자주 사용하는 데이터에 대한 근거가 되는 것.

    • 시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성

    • 공간지역성: 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성

    • 캐시히트와 캐시미스

      • 캐시에서 원하는 데이터를 찾으면 캐시히트, 없으면 주메모리로 가서 데이터를 찾아오는 것은 캐시미스.
      • 캐시히트는 데이터를 제어창치를 거쳐 가져오게 되어 빠름
      • 캐시미스는 메모리에서 가져옴. 시스템 버스 기반으로 작동하여 느림
    • 캐시매핑

      • 캐시가 히트되기 위해 매핑하는 방법
      • 직접 매핑: 처리가 빠르지만 충돌 발생이 잦음
      • 연관 매핑: 순서 일치 없이 관련 있는 캐시와 메모리 매핑. 충돌은 적지만 모든 블록을 탐색해야해서 속도가 느림
      • 집합 연관 매핑: 직접 매핑과 연관 매핑을 합쳐 놓은 것
    • 웹 브라우저의 캐시

      • 쿠키, 로컬 스토리지, 세션 스토리지가 있음. 사용자의 커스텀 정보다 일증 모듈 관련 사항들을 웹브라우저에 저장하여 추후 사용

      • 쿠키: 만료기한이 있는 키-값 저장소. 보통 서버에서 만료기한을 정함

      • 로컬 스토리지: 만료기한이 없는 키-값 저장소. 웹브라우저를 닫아도 유지된다.

      • 세션 스토리지: 만료기한이 없는 키-값 저장소. 클라이언트에서만 수정 가능

        3.2.2 메모리 관리
  • 가상 메모리

    • 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 사용자에게 매우 큰 메모리로 보이게 만드는 것
    • 이때 가상으로 주어진 주소는 가상주소, 실제 메모리상에 있는 주소는 실제 주소
    • 가상주소는 메모리 관리 장치에 의해 실제 주소로 변환
    • 스와핑
      • 당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 올리는 것을 반복하여 RAM을 효과적으로 관리하는 것
    • 페이지 폴트
      • 프로세스의 주소 공간에는 존재하지만 지금 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생
    • 스레싱
      • 메모리의 페이지 폴트율이 높은 것. 컴퓨터의 성능 저하 초래함
      • 해결하기 위해서는 메모리를 늘리거나 HDD를 SDD로 바꾸는 것, 운영체제에서는 작업 세트와 PFF
      • 작업세트: 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 것
      • PFF: 페이지 폴트 빈도를 조절하는 것. 상한선, 하한선을 만들어서 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이지를 줄임
    • 메모리 할당
      • 메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당
      • 연속 할당: 메모리에 연속적으로 공간을 할당
        • 고정 분할 방식: 메모리를 미리 나누어 관리. 융통성 없음, 내부 단편화 발생
        • 가변 분할 방식: 매시점 프로그램의 크기에 맞게 동적 메모리를 나눠 사용. 외부 단편화는 발생할 수 있음. 최초 적합, 최적 적합, 최악 적합이 있음
      • 불연속 할당: 메모리를 연속적으로 할당하지 않음
        • 페이징: 동일한 크기의 페이지 단위로 나누어 프로세스를 할당. 홀의 크기가 균일하지 않은 문제는 없어지지만 주소 변환 복잡해짐
        • 세그멘테이션: 의미 단위인 세그먼트로 나누는 방식. 공유와 보안 측면에서는 좋지만 홀 크기가 균일하지 않음
        • 페이지드 세그멘테이션: 공유나 보안을 세그먼트로 나누고 물리적 메모리는 페이지로 나누는 것
    • 페이지 교체 알고리즘
      • 스와핑이 많이 일어나지 않도록 설계되어야 함. 페이지 교체 알고리즘 기반으로 스와핑이 일어남
      • 오프라인 알고리즘: 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘. 미래에 사용되는 프로세스를 알 수 없기에 사용할 수 없지만 다른 알고리즘과의 성능 비교에 대한 기준 제공
      • FIFO: 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
      • LRU: 참조가 가장 오래된 페이지를 바꿈. 오래된 것을 파악하기 위해 페이지마다 계수기, 스택을 두어야 함. 보통 해시 테이블과 이중 연결 리스트로 구현
      • NUR: LRU에서 발전한 알고리즘. clock 알고리즘. 시계 방향으로 돌면서 최근에 참조되지 않은 프로세스를 찾아서 교체
      • LFU: 가장 참조 횟수가 적은 페이지를 교체

3.3 프로세스와 스레드

  • 프로세스는 컴퓨터에서 실행되고 있는 프로그램을 의미
  • 스레드는 프로세스 내 작업의 흐름 지칭

3.3.1 프로세스와 컴파일 과정

  • 프로세스는 프로그램으로부터 인스턴스화 된 것
  • 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 변역되어 실행될 수 있는 파일이 되는 것
  • 컴파일 과정
    • 전처리: 소스코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환
    • 컴파일러: 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환
    • 어셈블러: 어셈블리어는 목적 코드로 변환
    • 링커: 프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행 파일을 만든다.
    • 정적 라이브러리: 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식. 시스템 환경 등 외부 의존도가 낮고 코드 중복 등 메모리 효율성이 떨어짐
    • 동적 라이브러리: 프로그램 실행시 필요할 때만 DLL이라는 함수 정보를 통해 참조하는 방식. 메모리 효율성에서는 장점이지만 외부 의존도가 높아지는 단점이 있음

3.3.2 프로세스의 상태

  • 생성 상태: 프로세스가 생성된 상태를 의미. fork() 또는 exec() 함수를 통해 생성. 이때 PCB가 할당
    • fork(): 부모 프로세스의 주소 공간을 그대로 복사하며 새로운 자식 프로세스를 생성. 주소 공간만 복사하고 부모 프로세스의 비동기 작업 등을 상속하지는 않음
    • exec(): 새롭게 프로세스를 생성하는 함수
  • 대기 상태: 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기하고 있으며 CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태
  • 대기 중단 상태: 메모리 부족으로 일시 중단된 상태
  • 실행 상태: CPU 소유권과 메모리를 할당방고 인스트럭션을 수행중인 상태. CPU burst가 일어났다고 표현
  • 중단 상태: 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태. I/O 디바이스에 의한 인터럽트로 발생하기도 함
  • 일시 중단 상태: 대기 중단과 유사. 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태
  • 종료 상태: 메모리와 CPU 소유권을 모두 놓고 가는 상태. 자연스럽게 종료되는 것도 있지만 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료도 있음

3.3.3 프로세스의 메모리 구조

  • 운영체제는 프로세스에 메모리를 할당하는데 스택, 힙, 데이터 영역, 코드영역으로 나눈 구조를 기반으로 할당. 스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당
  • 스택
    • 지역변수, 매개변수, 함수가 저장. 컴파일 시에 크기가 결정되며 동적임
    • 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있음. 이때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 수택 사이의 공간을 비워놓음
    • 동적 할당할 때 사용. 런타임 시 크기가 결정됨. 벡터 같은 동적 배열은 힙에 동적 할당됨
  • 데이터 영역
    • 전역변수, 정적변수가 저장. 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어있는 영역
    • BSS 영역과 Data 영역으로 나눔. BSS 영역은 초기화 되지 않은 변수가 0으로 초기화되어 저장. Data 영역은 0이 아닌 다른 값으로 할당된 변수들이 저장
  • 코드 영역
    • 프로그램에 내장되어 있는 소스 코드가 들어가는 영역
    • 수정 불가능한 기계어로 저장되어 있으며 정적임

3.3.4 PCB

  • Process Control Block을 의미함. 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말함. 프로세스 제어 블록이라고도 한다. 프로세스가 생성되면 운영체제는 해당 PCB를 생성
  • 프로그램이 실행되면 프로세스가 생성. 프로세스 주소 값들에 의해 스택, 힙 등의 구조를 기반으로 메모리 할당.
  • 이 프로세스의 메타데이터들이 PCB에 저장되어 관리됨. 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리
  • PCB의 구조
    • 프로세스 스케줄링 상태: '준비', '일시중단' 프로세스가 CPU에 대한 소유권을 얻은 이후 또는 이후 경과된 시간과 같은 기타 스케줄링 정보
    • 프로세스 ID: 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
    • 프로세스 권한: 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
    • 프로그램 카운터: 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
    • CPU 레지스터: 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
    • CPU 스케줄링 정보: CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
    • 계정 정보: 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
    • I/O 상태 정보: 프로세스에 할당된 I/O 디바이스 목록
  • 컨텍스트 스위칭
    • PCB를 교환하는 과정을 말함
    • 한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생
    • 컴퓨터는 많은 프로그램을 동시에 실행하는 것처럼 보이지만 어떠한 시점에서 실행되고 있는 프로세스는 단 한개.
    • 다른 프로세스와 컨텍스트 스위칭이 아주 빠른 속도로 실행되기 때문에 많은 프로세스가 동시에 구동되는 것처럼 보임
    • 현대 컴퓨터는 멀티코어 CPU를 가져서 한 시점에 한 개의 프로그램이라는 설명은 틀리지만 컨텍스트 스위칭은 싱글 코어 기준으로 설명
    • 컨텍스트 스위칭이 일어날 때 유휴시간이 발생. 또한 캐시미스가 발생
    • 컨텍스트 스위칭이 일어날 때 메모리 주소가 그대로 있으면 잘못된 주소 변환이 생기므로 캐시클리어 과정을 겪게됨. 이 때문에 캐시미스 발생
    • 컨텍스트 스위칭은 스레드에서도 일어남. 스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에 비용이 더 적고 시간도 더 적게 걸림

3.3.5 멀티프로세싱

  • 여러 개의 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것
  • 하나 이상의 일을 병렬로 처리 가능
  • 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되더라도 다른 프로세스로 처리 가능
  • 웹브라우저
    • 멀티 프로세스 구조를 가지고 있음
    • 브라우저 프로세싀 주소 표시줄, 북마크 막대, 뒤로 가기 버튼 등을 담당하며 네트워크 요청이나 파일 접근같은 권한을 담당
    • 렌더러 프로세스: 웹사이트가 보이는 부분의 모든 것을 제어
    • 플러그인 프로세스: 웹사이트에서 사용하는 플러그인 제어
    • CPU 프로세스: CPU를 이용해서 화면을 그리는 부분 제어
  • IPC
    • 멀티프로세스는 IPC 가능. IPC는 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘
    • 클라이언트는 데이터 요청, 서버는 클라이언트 요청에 응답하는 것도 IPC의 예
    • IPC 종류로는 공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지 큐가 있음
    • 메모리가 완전히 공유되는 스레드보다는 속도가 떨어짐
    • 공유 메모리
      • 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것
      • 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만 공유 메모리를 통해 여러 프로세스가 하나의 메모리를 공유할 수 있음
      • 매개체를 통해 데이터를 주고받는 것이 아닌 메모리 자체를 공유하기 때문에 불필요한 데이터 복사의 오버헤드가 발생하지 않아 가장 빠름. 동기화 필요
    • 파일
      • 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터
    • 소켓
      • 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터. ex. TCP, UDP
    • 익명 파이프
      • 프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고받음.
      • 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 동작
      • 부모, 자식 프로세스 간에만 사용할 수 있음. 다른 네트워크 상에서는 사용 불가
    • 명명된 파이프
      • 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프
      • 클라이언트/서버 통신을 위한 별도의 파이프 제공
    • 메시지 큐
      • 메시지를 큐 데이터 구조 형태로 관리하는 것. 사용법이 매우 직관적이고 간단함
      • 공유 메모리르 통해 ICP를 구현할 때 동기화 때문에 기현을 구현하는 것이 복잡해질 수 있음. 이때 대안으로 메시지 큐 사용
  • 3.3.6 스레드와 멀티스레딩
  • 스레드
    • 스레드는 프로세스의 실행 가능한 가장 작은 단위.
    • 프로세스는 여러 스레드를 가질 수 있다.
    • 코드, 데이터, 스텍, 힙을 각각 생성하는 프로세스와 달리 스레드는 코드, 데이터, 힙은 스레드끼리 겅유. 그 외의 영역은 각각 생성
  • 멀티스레딩
    • 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법. 스레드끼리 서로 자원을 공유하기때문에 효율성이 높음. 동시성에도 큰 장점이 있음
    • 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼친다는 단점이 있음

3.3.7 공유 자원과 임계 영역

  • 공유자원
    • 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터 등의 자원이나 변수
    • 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁상태라고 함.
    • 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄 수 있음
  • 임계영역
    • 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역을 임계 영역이라고 함
    • 임계 영역을 해결하기 위한 방법은 뮤텍스, 세마포어, 모니터 세 가지가 있음. 세가지 모두 상호 배제, 한정 대기, 융통성 조건 만족
    • 이 방법에 토대가 되는 매커니즘은 잠금
  • 뮤텍스
    • 공유 자우너을 사용하기 전에 설정하고 사용한 후에 해제하는 잠금
  • 세마포어
    • 일반화된 뮤텍스. 간단한 정수 값과 두 가지 함수 wait 및 signal로 공유자원에 대한 접근 처리
    • 프로세스가 공유 자원에 접근하면 세마포어에서 wait() 작업 수행. 프로세스가 공유 자원 해제하면 세마포어에서 signal() 작업 수행.
    • 세마포어에는 조건변수가 없음. 프로세스가 세마포어 값을 수정할 때 다른 프로세스는 동시에 세마포어 값을 수정할 수 없음
    • 바이너리 세마포어: 0과 1의 두가지 값만 가질 수 있는 세마포어. 엄밀히 말하면 뮤텍스는 리소스에 대한 접근을 동기화하는 데 사용되는 잠금 메커니즘, 세마포어는 신호를 기반으로 상호 배제가 일어나는 신호 메커니즘
    • 카운팅 세마포어: 여러 개의 값을 가질 수 있는 세마포어. 여러 자원에 대한 접근을 제어하는 데 사용
  • 모니터
    • 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터 페이스만 적용
    • 모니터는 세마포어보다 구현하기 쉬움. 모니터에서 상호 배제는 자동이지만 세마포어에서는 명시적으로 규현해야 함

3.3.8 교착 상태

  • 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태
  • 교착 상태의 원인
    • 상호 배제: 한 프로세스가 자원을 독점. 다른 프로세스들은 접근이 불가능
    • 점유 대기: 특정 프로세스가 점유한 자원을 다른 프로세스가 요청
    • 비선점: 다른 프로세스의 자원을 강제적으로 가져올 수 없음
    • 환형 대기: 프로세스 A는 프로세스 B의 자원 요구, B는 A의 자원 요구
  • 교착 상태 히결 방법
    • 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계
    • 교착 상태 가능성이 없을 때만 자원 할당. 프로세스당 요청할 자원들의 최대치를 통해 자원 활당 가능 여부 파악
    • 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한 개씩 지움
    • 매우 드물게 일어나기 때문에 처리하는 비용이 더 커서 교착 상태가 발생하면 사용자가 작업 종료

3.4 CPU 스케줄링 알고리즘

  • CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당
  • 프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권 줄지 결정
  • 알고리즘은 CPU 이용률은 높게, 주어진 시간에 많은 일을 하게, 준비 큐에 있는 프로세스는 적게, 응답시간을 짧게 설정하는 것을 목표로 함

3.4.1 비선점형 방식

  • 프로세스가 스스로 CPU 소유권을 포기하는 방식. 강제로 프로세스를 중지하지 않음. 컨텍스트 스위칭으로 인한 부하가 적음
  • FCFS
    • 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘.
    • 길게 수행되는 프로세스 때문에 준비 큐에서 오래 기다리는 현상이 발생
  • SJF(Shortest Job First)
    • 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행
    • 긴 시간을 가진 프로세스가 실행되지 않는 현상 발생. 평균 대기 시간이 가장 짧음
    • 실제로 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 토대로 추측하여 사용
  • 우선순위
    • SJF에서 오래된 작업일수록 우선순위를 높이는 방법을 통해 단점 보완

3.4.2 선점형 방식

  • 현대 운영체제가 쓰는 방식. 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시키고 강제로 다른 프로세스에 CPU 소유권 할당
  • 라운드 로빈
    • 우선순위 스케줄링의 일종.
    • 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐 뒤로 감
    • 로드밸런서에서 트래픽 분산 알고리즘으로도 쓰임
  • SRF
    • 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행
  • 다단계 큐
    • 우선순위에 따른 준비 큐를 여러 개 사용
    • 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용
    • 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어짐

출처: 면접을 위한 CS 전공지식 노트