크래프톤 정글 TIL : 0720

lazyArtisan·2024년 7월 20일
0

정글 TIL

목록 보기
20/147

🎯 To-do List


운영체제 영상 보기
☑️ 운영체제 블로그 보기
✅ 토요일 저녁 : CSAPP 3.7절 발표
☑️ 월요일 점심 먹고 : 동적 프로그래밍 발표
☑️ 화요일 점심 먹고 : Knapsack Problem 발표



⚙️ 운영체제


https://www.youtube.com/playlist?list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O

Basics of OS (Computer System Operation)

이미지 출처

운영체제는 소프트웨어와 하드웨어를 잇는다.

입출력 장치에는 각각 컨트롤러들이 붙어 있다.
cpu는 컴퓨터의 뇌다.
무언가가 실행되거나 로드되려면 메인 메모리에 일단 들어가야된다.

모든 입출력 장치나 컨트롤러는 동시에 실행될 수 있음
동시에 문제없이 실행되도록 메모리를 각각 할당해줘야 함
이럴 때 메모리 컨트롤러가 필요함

Bootstrap program : 부팅 프로그램은 ROM(Read Only Memory)에 저장됨. 키면 제일 먼저 실행되는거. 운영체제를 불러온다. OS Kernel이라는 걸 불러와야 함.

Interrupt : 하드웨어가 CPU한테 "하던거 잠깐 멈추고 이거 먼저 해줘" 요청하는거

System Call (Monitor call) : 소프트웨어가 CPU한테 "이거 먼저 해줘" 하는거

Service Routine (I.S.R) : interrupt가 뭘 원하는지 적혀있는거. cpu가 interrupt 당하면 service rouitine에 있는거 읽고 그거 한다. 끝나면 다시 돌아감.

Basics of OS (Storage Structure)

Register > Cache > Main Memory > Electronic Disk > Magnetic Disk > Optical Disk > Magnetic Tapes
(왼쪽에 있을수록 비싸고 빠르지만 작음)

작업하려는 것들은 메인 메모리에 저장되고 나머지는 2차 메모리에 저장됨

Main Memory까지는 volatile(전원 꺼지면 내용 잃는다), 그 이후는 non volatile(꺼져도 내용 유지)
Electronic Disk 중에서도 volatile인 것들 있고
Main Memory 중세어도 non volatile인 것들 있다 (NVRAM)

Basics of OS (I/O Structure)

운영체제의 많은 부분은 입출력 장치를 제어하는데 쓰인다. 애초에 입출력 장치의 종류도 많고 성능에 중요한 부분이기 때문.

장치 컨트롤러는 Local Buffer Storage와 특수 목적 레지스터들을 관리한다.
Local Buffer Storage : 장치에 입출력되는 데이터들을 담아두는 작은 메모리. 모든 장치 데이터들은 로컬 버퍼를 통한다.

장치 드라이버는 장치 컨트롤러와 운영체제가 장치를 이해하고 이용할 수 있도록 하는 인터페이스를 제공한다.

입출력 장치 작업 시작할 때 장치 드라이버가 적합한 레지스터를 장치 컨트롤러를 위해 할당한다.
작업하는 동안 CPU와 장치는 로컬 버퍼를 경유하여 데이터를 주고 받는다.
장치에 데이터 전송이 완료되면 CPU에 Interrupt 한다.

근데 이렇게 입출력 장치 제어하면 데이터 많이 있을 땐 오버헤드가 크게 발생하므로 DMA (Direct Memory Access) 방식이 쓰이기도 한다. 이건 데이터 블럭을 전부 로컬 버퍼에서 메로리로 바로 전달한다.

Computer System Architecture

프로세서 개수에 따른 컴퓨터 시스템 종류
1. Single Processor Systems (CPU 하나)
2. Multiprocessor Systems (CPU 여러개)
3. Clustered Systems (독립된 컴퓨터가 여러개 엮임)

Throughput : 컴퓨팅이나 네트워킹에서 주어진 시간 동안 시스템이 처리할 수 있는 작업의 양

멀티 프로세서 시스템 종류
1. Symmetric Multiprocessing : 다같이 똑같은 작업 처리
2. Asymmetric Multiprocessing : 프로세서 하나는 일 배분만 하고 나머지들은 배분된 작업 처리

Operating System Structure

Multiprogramming

  • 운영체제는 CPU에 작업을 여러개로 쪼개서 준다.
  • 이렇게 되면 '작업 1', '작업 2'을 쪼개니까 중간에 '작업 1' 쉬는 시간 생길 때 '작업 2' 작은 작업 하나 처리할 수 있음.

Time Sharing(Multitasking)

  • 작업 여러 개 동시에 실행하는데 Multiprogramming과는 다르게 이거 했다가 저거 했다가 번갈아가면서 한다.
  • Time-shared 시스템은 여러 유저의 작업을 빠르게 번갈아가며 처리하여 모든 유저가 자신이 모든 시스템을 점유하고 있다고 생각하게 착각하게 해준다.

Operating System Services

운영체제가 제공하는 서비스
1. User Interface : Command Line Interface (CLI), Graphical User Interface (GUI)
2. 프로그램 실행
3. 입출력 작업
4. 파일 시스템 조작 (파일 삭제, 추가, 권한 변경 등)
5. 프로세스들 간의 정보 교환
6. 에러 탐지
7. 자원 할당 (CPU, 파일, 입출력 장치, 메인 메모리 등)
8. 자원 사용량 측정 (어디에 얼마나 자원이 쓰이고 있는지)
9. Protection and Security : Protection은 시스템 자원들에 대한 접근을 통제하는 것 (ex. 여러 프로세스가 실행될 때 어떤 프로세스는 다른 프로세스에 의해 방해받지 않아야 함) Secutiry는 허가 안 받은 사람이 시스템에 못 들어오도록 하는거

User Operating System Interface

어떤 운영체제는 커널에 command interpreter가 포함되어 있다.
윈도우나 UNIX같은 건 command interpreter를 별도의 프로그램으로 뺀다.

시스템에는 여러 command interpreters가 있다. shells라고 부른다.

  • Bourne shell
  • C shell
  • Bourne-Again shell (BASH)
  • Korn shell

System Call

유저 모드에서는 메모리같은 시스템 자원에 접근할 수 없음.
커널 모드로 들어가야 운영체제가 관리하는 시스템 자원에 접근할 수 있음.

시스템 콜(System Call) : 운영체제가 제공하는 서비스에 접근하기 위해 응용 프로그램이 호출하는 함수

cp in.txt out.txt

이렇게 간단한 거 (in.txt에 있는 내용을 복사해서 out.txt을 만드는 명령어) 입력해도

이미지 2차 출처

이렇게나 많은 시스템 콜들이 호출된다.

Types of System Calls

이미지 2차 출처

시스템 콜은 5가지로 나눌 수 있다.

  1. Process Control : 프로세스 조작함
  • 프로세스를 정상적으로 실행시키거나 종료시킴. 에러 생기면 작동 멈추게 함.
  • 프로세스의 속성을 얻어오거나 설정함
  • 실행될 때까지 잠시 기다림 (scheduling algorithm 배우면 뭔 말인지 알게된다고 함)
  • 이벤트가 일어날 동인 기다리거나 이벤트를 발생시킴
  • 특정 이벤트가 발생할 때까지 기다리거나 특정 이벤트가 발생했음을 다른 프로세스에게 알림
  • 메모리를 할당하거나 할당을 취소함
  1. File Manipulation : 파일 조작함
  • 파일 생성, 삭제
  • 파일 열기, 닫기
  • 파일 읽기, 수정, 이동
  • 파일 속성 가져오기, 수정
  1. Device Management : 장치 조작함
  • 프로세스가 장치에 대한 권한을 요청, 장치 다 썼으면 권한 취소
  • 장치에서 데이터 읽기, 장치에 데이터 쓰기, 장치에서 읽기/쓰기 수행할 위치 변경
  • 논리적 연결 및 연결 해제 : 시스템적으로 장치 접속을 끊어버림
    (물리적 연결 및 연결 해제 : 실제로 장치를 컴퓨터에 선을 꼽음)
  1. Information Maintenance : 시스템 정보 얻어옴
  • 날짜나 시간 정보 가져오거나 설정함
  • 시스템 정보 가져오거나 설정함
  • 프로세스, 파일, 장치의 속성들을 가져오거나 설정함
  1. Communications : 프로세스나 장치 간의 정보 주고받기
  • 통신 연결 생성, 해제
  • 매세지 송신, 수신
  • 상태 정보 송신
  • 원격 장치 연결 및 연결 해제

시스템 콜 목록

프로세스 관리

  • fork() : 새로운 프로세스를 생성합니다.
  • exec() : 현재 프로세스 주소 공간에서 새로운 프로그램을 실행합니다.
  • wait() : 자식 프로세스가 종료될 때까지 대기합니다.
  • exit() : 현재 프로세스를 종료합니다.
  • getpid() : 현재 프로세스의 프로세스 ID(PID)를 반환합니다.
  • getppid() : 현재 프로세스의 부모 프로세스 ID를 반환합니다.

파일 관리

  • open() : 파일을 엽니다.
  • close() : 열린 파일을 닫습니다.
  • read() : 파일에서 데이터를 읽습니다.
  • write() : 파일에 데이터를 씁니다.
  • lseek() : 파일 읽기/쓰기 위치를 이동합니다.
  • unlink() : 파일을 삭제합니다.
  • stat() : 파일의 상태 정보를 얻습니다.
  • fstat() : 파일 디스크립터로 파일의 상태 정보를 얻습니다.
  • lstat() : 심볼릭 링크의 상태 정보를 얻습니다.

디렉토리 관리

  • mkdir() : 새로운 디렉토리를 생성합니다.
  • rmdir() : 빈 디렉토리를 삭제합니다.
  • opendir() : 디렉토리를 엽니다.
  • readdir() : 디렉토리에서 다음 항목을 읽습니다.
  • closedir() : 열린 디렉토리를 닫습니다.

메모리 관리

  • brk() : 데이터 세그먼트의 크기를 변경합니다.
  • sbrk() : 데이터 세그먼트의 크기를 변경합니다.
  • mmap() : 파일이나 디바이스를 메모리에 매핑합니다.
  • munmap() : 메모리 매핑을 해제합니다.

네트워크 관리

  • socket() : 소켓을 생성합니다.
  • bind() : 소켓에 주소를 할당합니다.
  • listen() : 소켓을 수신 대기 상태로 만듭니다.
  • accept() : 수신 대기 중인 소켓 연결을 수락합니다.
  • connect() : 소켓을 통해 서버에 연결합니다.
  • send() : 소켓을 통해 데이터를 전송합니다.
  • recv() : 소켓을 통해 데이터를 수신합니다.

시간 관리

  • time() : 현재 시간을 초 단위로 반환합니다.
  • gettimeofday() : 현재 시간과 타임존 정보를 얻습니다.
  • nanosleep() : 지정된 시간 동안 프로세스를 일시 중지합니다.

시스템 정보

  • uname() : 시스템 정보를 얻습니다.
  • sysinfo() : 시스템 통계 정보를 얻습니다.

커널 모드 진입은 어떻게 하는거임?
시스템 콜 쓰면 그 자체가 커널 모드에 대한 인터페이스임?

네, 정확히 그렇습니다. 시스템 호출(System Call)을 사용하면 응용 프로그램이 커널 모드로 진입하는 인터페이스 역할을 합니다. 시스템 호출은 사용자 모드에서 실행되는 응용 프로그램이 커널 모드에서 제공하는 기능을 사용할 수 있게 해주는 메커니즘입니다. 이를 통해 응용 프로그램은 직접 하드웨어 자원에 접근하지 않고, 안전하게 운영체제의 기능을 이용할 수 있습니다.

0개의 댓글