[CS 스터디] 1.1 운영체제

Gamchan Kang·2024년 3월 26일
3

CS 스터디

목록 보기
1/5

본 포스팅은 기술 면접 대비 CS 전공 핵심요약집 기반 포스팅입니다.

1.1.1 운영체제란 (중요도 1)

  • HW와 다른 SW 계층을 연결하는 SW 계층
  • CPU, 메모리 같은 리소스 관리
  • 사용자에게 컴퓨터 사용 환경 제공

1.1.2 운영체제의 목적 (중요도 1)

  • throughput 향상: 리소스 관리를 통해 시스템이 처리하는 일의 양(throughput) 향상 throughput: 단위 시간 당 시스템이 처리할 수 있는 작업의 수(ex. 초당 트랜젝션 수)
  • turnaround time 단축: 요청 작업 완료까지 소요 시간(turnaround time) 단축 turnaround time: 완료 시간 - 도착 시간
  • availability 향상: 시스템 자원을 즉시 사용하도록 함 availability: 총운영시간다운타임총운영시간×100%\frac{총 운영 시간 - 다운 타임}{총 운영 시간} \times 100\%
  • reliability 향상: 시스템이 주어진 문제를 정확히 풀도록 함 reliability: Mean Time To Failure(평균 고장 시간), Mean Time Between Failure(평균 고장 간 시간), Mean Time To Repair(평균 복구 시간) 등 지표로 측정

1.1.3 CPU와 메모리 구조 (중요도 2)

  • CPU == 프로세서
  • 메모리 = 주 기억장치(휘발성 메모리, 메인 메모리, RAM) + 보조 기억장치(비휘발성 메모리, SSD, HDD)
  • 레지스터: CPU 연산에서 데이터를 임시로 담는 공간. CPU 내부에 존재
  • 캐시 메모리: CPU와 RAM 사이 속도 차이를 해결하기 위한 기억장치. CPU 내부에 존재
  • RAM: 휘발성 기억장치. 하드 디스크보다 빠르게 접근할 수 있다.
  • 하드디스크: 비휘발성 기억장치. 데이터와 프로그램을 저장하는 공간

* 2차원 배열에서 데이터에 접근할 때 행 우선 접근과 열 우선 접근에 따라 실행 속도 차이가 발생한다. 이는 행 우선 접근이 연속적으로 데이터를 읽기 때문에 캐시 미스가 덜 발생하기 때문이다.

import numpy as np
import time

n = 10000
data = np.random.rand(n, n) # n x n 배열 생성

start_time = time.time()
row_sum = 0
for i in range(n):
    for j in range(n):
        row_sum += data[i][j] # 행 우선 접근
row_access_time = time.time() - start_time

start_time = time.time()
col_sum = 0
for i in range(n):
    for j in range(n):
        col_sum += data[j][i] # 열 우선 접근
col_access_time = time.time() - start_time

print(f"row_sum: {row_sum}, 행 우선 접근 시간: {row_access_time}초")
print(f"col_sum: {col_sum}, 열 우선 접근 시간: {col_access_time}초")
row_sum: 50004354.466031946, 행 우선 접근 시간: 16.925222158432007초
row_sum: 50004354.46602755, 행 우선 접근 시간: 17.36072301864624초

row_sum: 50002470.00757994, 행 우선 접근 시간: 18.837072134017944초
col_sum: 50002470.007534936, 열 우선 접근 시간: 19.26168394088745초

시간 차이가 별로 안나는 이유

  • 현대 CPU는 캐시 최적화 기술 사용 ex) pre-fetching을 통해 데이터를 캐시에 미리 로드함
  • numpy 내부 최적화 기법: 연속된 메모리 접근 기법 (그 외에도 C 언어 기반 구현, 데이터 타입 최적화, 벡터화 연산, 블록 단위 연산 등이 있다.)

1.1.4 커널과 시스템 콜 (중요도 3)

  • kernel: OS 핵심 요소로 HW/프로세스(SW) 보안, 자원 관리, 하드웨어 추상화 역할을 수행함, CPU 스케줄링, 메모리 관리, 입출력 관리, 파일 시스템 관리 등을 담당한다.

  • kernel mode: 리소스에 직접 접근 가능 → 메모리, CPU 자원 사용 가능

  • user mode: 리소스에 직접 접근 불가능

user mode에서 실행된 프로세스가 리소스에 접근하기 위해서는 시스템 콜을 호출해야 함

시스템 콜로 프로세스 제어, 파일 관리, 장치 관리, 데이터 유지/보수, 통신, 보호가 가능하다.

import subprocess


# macOS/Linux: clear 후 실행할 것
# cwd의 파일, 디렉토리 리스트 출력
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)

print("stdout:", result.stdout)
print("stderr:", result.stderr)

# google.com 핑 테스트
proc = subprocess.Popen(['ping', '-c 4', 'google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

stdout, stderr = proc.communicate()

print("stdout:", stdout.decode())
print("stderr:", stderr.decode())
stdout: total 16
-rw-r--r--  1 chan  staff  651 Mar 23 13:54 README.md
drwxr-xr-x  6 chan  staff  192 Mar 26 15:36 cs_study
drwxr-xr-x  5 chan  staff  160 Mar 26 16:18 gamchan
-rw-r--r--  1 chan  staff   14 Mar 26 15:37 requirements.txt
drwxr-xr-x  3 chan  staff   96 Mar 23 13:41 src

stderr: 
stdout: PING google.com (142.250.204.142): 56 data bytes
64 bytes from 142.250.204.142: icmp_seq=0 ttl=112 time=41.118 ms
64 bytes from 142.250.204.142: icmp_seq=1 ttl=112 time=86.891 ms
64 bytes from 142.250.204.142: icmp_seq=2 ttl=112 time=47.206 ms
64 bytes from 142.250.204.142: icmp_seq=3 ttl=112 time=42.658 ms

--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 41.118/54.468/86.891/18.853 ms

stderr:

시스템 콜에서 커널에 매개변수 전달

  • CPU 레지스터에 직접 전달 → 매개변수 개수 > 레지스터 개수 일 경우 문제 발생
  • 메모리 저장 후 메모리 주소 값을 레지스터에 저장
  • 프로그램 스택에 push 후 OS에서 pop
profile
Someday, the dream will come true

0개의 댓글