Computer Security

#33 CPU 구조 (Processor affinity 실습) 본문

리눅스 시스템 프로그래밍

#33 CPU 구조 (Processor affinity 실습)

쿠리 Kuri 2022. 10. 8. 18:30
반응형

1.리눅스 시스템상에서 CPU가 어떻게 보이는지 cat/proc/cpuinfo 명령어를 이용해 먼저 확인 해보자.

sched_setaffinity , sched_getaffinity, getcpu를 이용해서 0번 CPU에 스케줄링했다가 1번으로 바꿨다가 동작하는 예제코드를 작성 해보자.

 

 

 

 

 

 


2. 기본 뼈대를 만들어준다.

main

 

 

 

 

 


3. sched_getaffinity, getpid 를 이용해서 현재 동작하고있는 프로세스에 affinity상태를 얻자.

#define _GNU_SOURCE
#include <sched.h>


int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
해당 프로세스가 어디에서 동작할 수 있는지 읽어올 수 있는 API


#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void)
현재 프로세스 얻는 API

 

 

 

 

 

 


4. mask를 받아서 화면에 출력하게끔 함수를 하나 만들어서 어디에 masking이 되어있는지 보자.

 

 

 

 

 


5. 전체 코드이다.

process.c

 

 

 

 

 


6. gcc 명령어를 이용해 컴파일 한 뒤, 실행 시켜보자.

./prcoess

현재는 CPU 0번과 1번에서 동작 할 수 있도록 설정되어있다.

 

 

 

 

 

 


7. 원래 코드에서 getcpu API를 이용해서 현재 어느 CPU에서 동작하고 있는지 알아보자.

int sched_getcpu(void);

반환 값

 

- 성공 시 CPU 번호(non-negative)

- 실패 시 -1

 
 
 
 
 
 
 
 
 

8. sched_setaffinity API를 이용해 동작할 CPU를 변경 해보자.

 

 

 

 

 

 


9. 완성된 전체 코드이다.

process.c

 

 

 

 

 


10. gcc 명령어를 이용해 컴파일 한 뒤, 실행 시켜보자.

./process

정상적을 CPU가 바뀐걸 확인 할 수 있다!

 

반응형
Comments