HJW's IT Blog

OS Management + System Call 본문

OS

OS Management + System Call

kiki1875 2023. 4. 1. 15:43

Process Management

OS 는 다음 활동들을 관리해야 한다

- User Programs

- System programs

 

각 활동들은 암호화 되어 process 속에 있다 

  • [text, data, segment, stack] 구조로 되어 있다
  • 왜 이런 구조 일까?
    • ex) Chrome 을 3번 돌린다면 process 가 3번 돌게 되는데 프로세스를 처음부터 모두 다 돌리게 된다면 메인 메모리의 사용이 비효율적이게 된다.
    • 그러므로, 동일한 부분 공유 
      • 전역변수(HEAP) -> 어떤 프로세스던 바로 접근 가능하게
      • 지역변수(STACK) -> 지역변수의 사용이 끝나기 전에 이전 지역변수 참조할 필요 x. 그러므로 stack을 사용

OS는 프로세스를 생성, 대기, 재생, 그리고 계획할 수 있어야 한다. 또한 프로세스간 통신과 동기화를 지원하고 교착상태를 처리해야 한다.

 

 

 

Memory Management

Main Memory

  • CPU가 바로 접근할 수 있는 접근권한 및 방법 제공
  • 프로세스는 main memory 속에 있어야 실행 될 수 있다
  • 운영체제는 다음 활동을 보장 해야 한다
    • 메모리 사용량 기록
    • 여분 메모리 기록
    • 메모리 공간 보호
    • 프로세스에게 메모리 할당 
    • 프로세스 Swap (memory<->disk)
    • 언제 각 프로세스를 메모리에 올릴지
    • 한 프로세스에 얼마만큼의 메모리를 할당할 지
    • 언제 실행중인 프로세스가 메모리에서 나갈지

System Call

System call (syscall) 이란 OS 커널에서 실행되는 서비스로 User Process와 커널간의 인터페이스 역할을 한다.

 

 

Sysem call의 Process Control

  • 프로그램 종료
  • 다른 프로그램 load/execute
  • 프로세스 생성/제거

System call 의 File Manipulation

  • 파일 열기, 닫기, 생성, 쓰기, 읽기 등..
  • Get / Set Attributes

System Call 의 Device Manipulaiton

  • 장치 요청, 읽기, 쓰기 등

 

 

Syscall 작동과정

1. 사용자가 syscall 호출

2. User Process는 호출된 syscall 이 어떤 argument를 필요로 하는지, 그 인자들 전달

3. 커널은 user process의 요청을 받아들이고 syscall 처리를 위해 CPU 제어권을 가져온다

4. 커널은 syscall 실행, user process가 요청한 작업 수행

            - 커널은 요청 수행에 필요한 자원 할당, 결과를 process에 반환

5. syscall 후 커널은 CPU 제어권을 다시 user process에게 반환

 

Control Flow in MIPs

MIPs 에서는 jal ( jump and link ) 를 사용하여 함수를 불러온다

Jal 이 복귀 주소를 저장하고($ra <- PC + 4 ) caller로 돌아갈 때 참조한다.

 

Spilling Registers

CPU 내에 레지스터는 한정적이며 동일한 레지스터가 필요한 경우가 생긴다. 그렇다면 동인할 레지스터가 각 다른 함수에서 필요로 한다면 어떻게 해결할 까?

 

중요한 레지스터들은 함수가 수행되기 전, 저장해 두었다가 함수 완료 후 복구 시킨다 -> Stack 사용

  • 함수가 호출될 때 => Push
  • 함수가 복귀할 때 => Pop
  • MIPS 에서는 메인 메모리를 스텍처럼 사용

 

그렇다면 caller 가 저장해야 할까 callee가 저장해야 할까?

  • Caller는 어떤 레지스터가 중요한지 알고
  • Callee는 어떤 레지스터가 사용될 지 안다
  • Caller가 저장을 했을시에, 어떤 레지스터들이 사용될 지 모르기에 필요 이상으로 저장할 수 있다
  • Callee가 저장을 했을시에, 어떤 레지스터들이 중요한지 모르기에 필요 이상으로 저장할 수 있다

그렇기에 컴퓨터 아키텍쳐에 따라 다르지만 caller와 callee 둘 모두가 저장하는 방식이 있다

  • caller는 다음 레지스터를 저장/복원한다
    • ($t0 - %t9) , ( $a0 - $a3), ($v0 - $v1)
  • callee는 다음 레지스터를 저장/복원한다
    • ($s0 - $s7), $ra

'OS' 카테고리의 다른 글

OS:Cooperating Process  (0) 2023.04.06
CPU Scheduler  (0) 2023.04.03
Frame Pointer, Stack Pointer  (0) 2023.04.02
OS: Process  (0) 2023.04.02
OS 개요  (0) 2023.03.31