| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- synchronized
- 일급 컬렉션
- factory
- Dependency Injection
- java
- OAuth 2.0
- Spring
- builder
- Volatile
- 일급 객체
- lombok
- spring security
- Google OAuth
- Today
- Total
HJW's IT Blog
OS Management + System Call 본문
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 |