Computer System Overview2
Operating system structure
Multiprogramming
multipromgramming 은 efficiency 측면에서 필요하다. (자원 활용의 효율성을 높여준다.)
cpu가 불필요한 wait을 하지 않도록 해준다.
job scheduling을 통해 실행한다.
i/o 와 같은 wait 이 발생하면 다른 일을 수행한다. → multitasking을 위해, 모든 프로그램이 조금씩 실행하도록
Timesharing(multitasking)
-cpu의 시간을 나눠서 사용
-모든 프로그램을 메모리에 올릴 수 없으므로 swapping 방식(실행되지 않은 프로그램을 디스크로 보내는 것)을 사용 → 속도가 느려지는 문제 발생
-virtual memory를 사용하여 swapping 방식의 문제를 해결, virtual memory는 현재 필요한 부분만 메모리에 올리는 방식으로 메모리를 관리
Operating System Operation
interrupt는 hardware로 부터 발생한다.
software error , request는 exception이나 trap을 발생 시킨다. → 현재 실행중인 것을 중단하고 error 처리(error의 파급력이 전체적으로 크기 때문), i/o 때문x, interrupt방식과 유사
Dual-mode 동작이 OS를 보호한다.
-user mode 와 kernel mode 사용
-hardware 가 mode bit 제공
-system call은 직접 호출하지 않고 라이브러리 함수를 이용하여 안전하고 편리하게 호출한다. ex)printf()
-operating system code와 application code를 구분해서 전달 (권한이 달라지기 때문) > mode bit 사용
Process Management
Process : 프로그램 실행에 필요한 모든 정보를 담는 자료구조 → 메모리에 전달하는 형식
프로그램 실행 시 필요한 요소 : cpu, memory, i/o, files, initialization data
single-threaded process 는 하나의 program counter(프로그램 실행 위치 저장) 을 갖는다.
multi-threaded process의 경우 하나의 thread당 하나의 program counter를 갖는다.
program management activities
-creating and deleting user and system process
-suspending and resuming process
-providing mechanisms for process syncronization(동기화)
-providing mechanisms for process communication → 프로세스 간 통신
-providing mechanisms for deadlock handling
memory management
processing 전과 후의 모든 메모리 관리
메모리의 어떤 위치에 어떤 것이 있는지 내용들을 관리
어떤 data나 process를 memory에 넣고, 제거할 지 관리
필요할 때 memory 공간을 할당
Storage Management
Application이 Harddisk에 접근하는 방식은 어렵고 복잡 → file 공간에 쓰고 저장해라 그러면 OS가 알아서 하드디스크에 저장할게!
file을 체계적으로 저장하고 관리하기 위해 directories를 사용
Mass-Storage Management
-대량의 데이터를 저장하고 관리 →안전성,보안성,검색성,자원최적화 등을 보장
-free-space management
-storage allocation
-disk scheduling → i/o가 느리기 때문에 요청 순서를 조절하여 harddisk head의 움직임을 최소화
Migragion of integer A from Disk to Resgister
magnetic disk → main memory → cache → hardware register
multitasking 환경은 최신 data(recent value) 라는 것을 보장해줘야한다. → core가 여러개일 때 어려워짐
multiprocessor 환경에서는 cache coherency를 보장하여 모든 cpu에서 cache에 가장 최근의 데이터 값을 갖도록 해야한다.
I/O Subsystem
OS는 사용자가 수많은 종류의 I/O 장치를 구분없이 사용할 수 있도록 해주는 것이 목표이다.
block device, clock device 만 구분해서 전달해줘 > 나머지는 OS가 해줄게
-buffering(임시저장공간)
-caching(빠른 저장 공간에 두는 것)
-spooling (직접 보내지 않고 spool에 두면 os가 읽어가는 방식)
Protection and Security
프로세스는 실행한 사용자의 권한을 승계받아서 작동
Protection - 권한 없는 사용자가 접근 시 보호
모든 사용자에 ID를 부여하고 ID에 권한을 부여하여 관리 (root는 만능 , 모두 가능)
-system은 사용자들을 구분하고 권한을 구분
-user identities
-user id
-group identifier(group id)
-privilege escalation → ex)os가 만든 영역(spool)에 사용자가 접근하는 것이 불가능 하여 print의 경우처럼 권한을 잠시 부여 후 다시 회수하는 것
Operation System Services
System Calls
:os가 제공하는 service 의 programming interface
system call을 이용하여 os가 제공하는 service를 사용 가능하다.
direct system call 보다는 주로 Application Program Interface(API) 통해서 접근
-WIn32 API → 윈도우용
-POSIX API → UNIX계열
-JAVA API → JVM
→ 계열에 따라 같은 API를 사용한다. print()의 경우 C에서 제공하는 것이라 공통적으로 사용 가능
system call 보다 api를 사용하는 이유 : portability(이식성) → 소스 코드를 하나로 통일 가능 , 쉬운 사용
System Call Implementation
일반적으로 시스템 호출 인터페이스와 관련된 번호는 이러한 번호에 따라 색인된 테이블 유지→table을 찾아서 이동
시스템 호출 인터페이스는 OS 커널에서 의도된 시스템 호출을 호출하고 시스템 호출의 상태와 반환 값을 반환
호출자는 시스템 호출이 구현되는 방법에 대해 아무것도 알 필요가 없음
-API를 준수하고 결과적으로 OS가 수행할 작업을 파악해야 함
-API에 의해 프로그래머에게 숨겨져 있는 OS 인터페이스의 대부분 세부 정보
Virtual Machines
-하드웨어와 OS를 묶어서 텅 빈 하드웨어처럼 만들어줌(실제 OS는 존재)
-a는 nonvirtual machine, b는 virtual machine
virtual machine은 각각의 os를 따로 관리할 수 있음(경제성이 높음)
The Java Virtual Machine
-사용자 PC에 가서 해당 PC에 맞도록 컴파일 하자!
-JVM을 각 기기에 설치