운영체제

- 목적

처리능력 / 사용가능도 / 신뢰도 / 반환시간

 

- 기능

데이터와 자원 관리 및 공유 / 자원 스케일링 / 편리 인터페이스 / 하드웨어와 네트워크를 관리 및 제어 / 시스템 오류 검사 및 복구

UNIX

시분할 시스템을 위해 설계된 대화식 운영체제, 소스가 공개된 개방형 시스템

  • 커널: 유닉스 핵심, 프로세스 생성종료, 기억장치 할당 회수, 파일 시스템 관리
  • : 명령어 해석, 사용자 인터페이스

배치전략

새로 반입되는 데이터를 데이터가 들어갈 수 있는 크기의 빈 영역 중 어디에 배치할지 결정하는 전략

  • 단편화: 할당되고도 사용되지 않고 남아있는 빈 공간
  • 최초 적합(First fit): 첫번째 영역에 배치
  • 최적 적합(Best fit): 단편화 가장 작게 남기는 영역에 배치
  • 최악 적합(Worst fit): 단편화 가장 많이 남기는 영역에 배치

페이지 교체 알고리즘

  • FIFO (First In First Out)
    페이지 프레임이 꽉 차면 가장 먼저 들어온 것을 교체
    페이지 부재: 현재 프레임에 없어서 새로 가져와야 하는 경우
  • LRU (Least Recently Used)
    최근에 가장 오랫동안 사용하지 않은 페이지를 교체
  • OPT: 가장 오랫동안 사용하지 않을 페이지를 교체
  • LFU: 가장 빈도 높게 사용된 페이지를 교체
  • NUR: 최근에 사용하지 않은 페이지를 교체
  • SCR: 2차 기회 교체

프로세스 = 작업, 태스크

프로세서에 의해 실행 중인 프로그램, 비동기적 행위를 일으키는 주체 / PCB를 가진 프로그램

 

PCB (Process Control Block)

프로세스의 중요한 정보 저장

프로세스가 생성될 때 고유 PCB 생성, 프로세스 완료되면 PCB 제거

 

- 저장 정보

프로세스 현재상태 / 포인터 / 프로세스 고유 식별자 / 스케줄링 및 프로세스의 우선 순위 / CPU 레지스터 정보 / 주기억장치 관리 정보 / 입출력 상태 정보

 

- 프로세스 상태 전이

  1. 제출(Submit): 사용자가 작업을 시스템에 제출한 상태
  2. 접수(Hold): 디스크(스풀공간)에 작업이 저장된 상태
  3. 준비(Ready): by 잡스케줄러 / 프로세스가 프로세서 할당 받기 위해 큐에서 기다림
  4. 실행(Run): by CPU 프로세서 스케줄러 / 프로세서 할당받아 실행됨
    완료 전 할당시간 종료 시 [준비] 상태
    입출력 필요시 [대기(Wait, Block)] 상태
  5. 종료(Exit)
  • 웨이크업: [대기] → [준비] 전이 과정
  • 디스패치: [준비] → [실행] 전이 과정
  • 스풀링: 입출력 나중에 한꺼번에 하려고 디스크에 저장하는 과정
  • 교통량제어기: 프로세스 상태를 조사, 통보

스레드 = 경량 프로세스

프로세스 내 작업 단위, 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위

독립적 스케줄링 최소단위로 스레드기반 시스템에서 프로세스 역할 담당함

  • 단일스레드: 1프로세스, 1스레드
  • 다중스레드: 1프로세스, 여러스레드
  • 사용자 수준 스레드: 속도빠름, 구현어려움
  • 커널 수준 스레드: 속도느림, 구현쉬움

IPv6

인터넷 프로토콜 버전6

IPv4 부족문제 해결을 위해 128bit 긴 주소로 개발

자동 네트워크 환경 구성(미리 예약된 고유성 있는 주소로)

유니 / 애니 / 멀티 캐스트로 구성

  • 인증성, 기밀성 데이터 무결성 → 보안문제 해결
  • 확장성, 융통성, 연동성 → 멀티미디어 기능
  • 등급별, 서비스별 패킷 구분 → 품질보장 용이
  • 기본헤더 + 확장헤더 → 네트워크 확장 기능 용이

OSI 참조 모델

- 7계층 ( 아파서 티내다 피 / APS TND P )

  1. 물리(Physical)
    by 리피터, 허브 / 두 장치간 실제 기계적, 전기적, 기능적, 절차적 기능 정의
  2. 데이터 링크(Data link)
    노드 간 프레임 전송 / 흐름제어, 오류제어 / 링크의 설정, 유지, 종료 담당
  3. 네트워크(Network)
    by 라우터, 패킷 전달 / 발신지 → 목적지에 논리주소 추가 / 경로 설정 및 네트워크 연결 관리
  4. 전송(Transport)
    단말기 사이에 데이터전달 / 종단 간 전송 연결 / 하위계층과 상위계층 인터페이스 역할
  5. 세션(Session)
    송수신 측 관련성 유지, 대화제어
    동기점: 대화 동기 제어를 위한 체크점, 데이터 복구 목적
  6. 표현(Presentation)
    코드변환, 구문검색, 데이터 암호화 및 압축, 정보형식변환, 문맥관리
    응용과 세션 사이에서 표현형태 변환
  7. 응용(Application)
    사용자에게 서비스 제공 / 응용 프로세스 간 정보교환, 전자사서함, 파일전송, 가상터미널

TCP/IP

- 4계층 ( 응전인네 )

  1. 용(Application)
    • MQTT: 발행 - 구독 메시징 프로토콜, IoT 환경
  2. 송(Transport)
    • TCP
      OSI [전송] 계층 해당, 신뢰성 있는 연결지향형 전달 서비스
      스트림전송, 순서제어, 오류제어, 흐름제어, 양방향, 가상회선연결
      기본헤더 20 ~ 60byte, 최대 100byte까지 확장가능
    • UDT
      TCP에 비해 단순한 헤더구조 → 오버헤드 적음
      흐름제어, 순서제어 없음 → 전송속도 빠름
  3. 터넷
    • IP: OSI [네트워크] 계층 해당, 비연결성 데이터그램 방식, 신뢰성 보장X
    • ARP: 물리적주소(MAC)로 변환
    • RARP: IP주소로 변환
  4. 트워크 엑세스
    • 이더넷(IEEE 803.2): CSMA / CD 방식으로 전송매체 접속 제어

변수

변할 수 있는 값, 명령 처리 도중 발생하는 값을 저장하기 위한 공간

 

- 변수명 작성규칙

영문자, 숫자, 언더바 / 첫글자 숫자 안됨 / 공백 및 특수문자 안됨 / 문장 끝 세미콜론 / 대소문자 구분 / 예약어 사용 불가

연산자

- 연산자 우선순위 ( 단산시 관비논 논삼대 )

  1. 항 연산자: ! ~ ++ -- sizeof
  2. 술 연산자: + - * / %
  3. 프트 연산자: << >>
  4. 계 연산자: < <= >= > == !=
  5. 트 연산자: & ^ |
  6. 리 연산자: && ||
  7. () 연산자: ? :
  8. 입 연산자: = += -= *= /= %= <<= >>=
  9. 서 연산자: ,

조건문

if문

조건이 참이나 거짓일 때 실행

if(조건)
	실행할 문장1;
else
	실행할 문장2;

반복문

for문

for(초기값; 최종값; 증가값)
	실행할 문장;

while문

조건이 참인동안 실행

while(조건)
	실행할 문장;

do - while문

우선 한 번 실행한 후 조건이 참인동안 반복, 거짓이면 탈출

do
	실행할 문장;
while(조건);

배열

C) 배열 인덱스는 0부터 / 자료형, 변수명(배열 이름), 개수(배열의 크기, 생략 가능)

  •  1차원 배열 형식: 자료형 변수명 [개수];
int price[100];

슬라이스

Python) 문자열이나 리스트와 같은 순차형 객체에서 초기위치부터 최종위치 전까지 잘라 반환 / 증가값 생략 가능

  • 객체명[초기위치:최종위:증가값]
// 문자열
str = "python"
part_str = str[1:5]
print(part_str)  // ytho

// 리스트
a = [1,2,3,4,5]
a[2:4]          // [3, 4]
a[1:4:2]        // [2, 4]

scanf()

C) 표준입력함수, 입력받은 데이터를 변수에 저장하는 함수

서식 문자열: 입력받을 데이터의 자료형

변수의 주소: 데이터 입력받을 변수, 변수에 주소연산자 &를 붙임

  • scanf(서식 문자열, 변수의 주소)
int x;
scanf("%d", &x); // 입력 받기
printf("%d", x); // 입력값 출력하기

printf()

C) 표준출력함수, 인수로 주어진 값을 화면에 출력하는 함수

  • print(): 괄호 내부 내용 출력, 행안바꿈
  • println(): 괄호 내부 내용 출력 후 행 바꿈
  • printf(): 지정된 포맷으로 괄호 내부 내용 출력
print("Hi!");             // Hi!
println("Hello World!");  // Hello World!\n

int x = 5;
printf("%d", x);          // 5